c++ sscanf显示意外行为

C++ sscanf shows unexpected behavior

本文关键字:意外 显示 sscanf c++      更新时间:2023-10-16

我有一个字符串,看起来像L""4"",并希望将其解析为整数值。

std::wstring wsFoo(L""4"");
int iSize = 1; // Number of characters the number will have
int iResult = -1;
swscanf_s(wsFoo.c_str(), L""%*d"", iSize, &iResult);
wprintf_s(L"%d", iResult);

根据http://www.cplusplus.com/reference/clibrary/cstdio/printf/, %*d中的星号应该表示:宽度不在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数

然而,iResult的值将在此代码片段后显示为-1。为什么?

我不知道它是否有帮助,但我正在使用msvc++ 2010

这个MSDN页面解释了* like的用法:

百分号后面的星号(*)禁止赋值下一个输入字段,它被解释为指定的字段类型。该字段被扫描,但不存储。

请注意,printf和scanf的格式字段非常接近,但并不相同。

您看到的是printf中星号的含义,而不是scanf。

如果在百分比和运算符(例如%*d)之间加上星号(*),则运算符将只匹配其参数,而不赋值任何变量。

http://docs.roxen.com/pike/7.0/tutorial/strings/sscanf.xml