C ++ sscanf显示出意外的行为

时间:2011-12-10 22:18:59

标签: c++ parsing formatting stdout scanf

我有一个类似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。

2 个答案:

答案 0 :(得分:3)

This MSDN page解释了使用* like:

  

百分号后面的星号(*)会抑制分配   下一个输入字段,它被解释为指定的字段   类型。该字段已扫描但未存储。

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

答案 1 :(得分:1)

您正在查看printf的星号含义,而不是scanf。

如果在百分比和操作员之间放置星号(*),e。 G。 %* d,运算符只匹配其参数,而不分配任何变量。

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