我有一个类似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。
答案 0 :(得分:3)
This MSDN page解释了使用* like:
百分号后面的星号(*)会抑制分配 下一个输入字段,它被解释为指定的字段 类型。该字段已扫描但未存储。
请注意,printf和scanf的格式字段很接近但不相同。
答案 1 :(得分:1)
您正在查看printf的星号含义,而不是scanf。
如果在百分比和操作员之间放置星号(*),e。 G。 %* d,运算符只匹配其参数,而不分配任何变量。