该代码不起作用:

_tprintf(TEXT("Enter password or press enter to skip: "));
pszPassword = new TCHAR[100];
int numFields = _tscanf_s(TEXT("%s"), pszPassword, 100);
if (numFields == 0) // never reached
{
    delete[] pszPassword;
    pszPassword = NULL;
}


按Enter键不会使scanf中止解析输入,因为它会跳过空白,直到找到非空白字符为止。

我怎样才能达到期望的行为?

该程序实际上是C语言,我使用newdelete而不是malloc,但是不想使用std::string等。

最佳答案

在C中使用fgets而不是C ++进行相同操作,并且可以正常工作:

TCHAR *pszPassword = malloc(100 * sizeof (TCHAR));

_tprintf(TEXT("Enter password or press enter to skip: "));
_fgetts(pszPassword, 100, stdin) ;

if (pszPassword[0] == '\n')
{
  free(pszPassword) ;
  pszPassword = NULL;
}

08-17 23:37