【发布时间】:2014-03-04 08:49:46
【问题描述】:
我正在解析一个字符串(一个 char*),我正在使用 sscanf 将字符串中的数字解析为双精度数,如下所示:
while(*s){
if(sscanf(s, " %1[MmLl] %f %f %n ", command, &x, &y, &n) == 3){
//Do some processing
s += n;
}
}
这适用于大多数输入,除了少数情况。问题在于计数变量 n。对于某些输入,变量 n 永远不会更新,它会继续保持上一次迭代的计数。这会导致错误的偏移量并弄乱解析。 我没有看到失败的输入有什么奇怪的地方。
注意:此问题仅在 Windows 中发生,因为相同的代码在 linux 中产生正确的输出。
有没有人遇到过类似的问题?
【问题讨论】:
-
去掉
%n前后的空格。 -
谢谢。删除 %n 前后的空格有效。
-
解释为什么这样可以解决问题?这对我来说不是很明显。
-
我同意 R。这是 Microsoft 的错误吗?你说'对于 some 输入,变量 n 永远不会更新'。你能举一个失败的实际例子吗?
标签: c windows string-parsing scanf