c++ sscanf显示意外行为
C++ sscanf shows unexpected behavior
我有一个字符串,看起来像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相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 在C++中对T*类型执行std::move的意外行为
- 程序崩溃并显示"std::out_of_range"错误
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 处理除以零会导致<csignal>意外行为
- 从数据库实时显示QT c++中的数据
- vscode下的Arduino代码出现意外编译错误
- Cpp代码故障(显示意外数字)
- 初始化和显示整数向量时出现意外结果
- C++模板类显示意外结果
- 带有标准容器和常量引用的c++代码显示出意外的内存
- 代码::gdb 显示意外行为的块
- C++分配的指针显示意外行为
- c++ sscanf显示意外行为