【问题标题】:Format specifier %n while used with sscanf is not returning the count of characters与 sscanf 一起使用时,格式说明符 %n 不返回字符数
【发布时间】: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


【解决方案1】:

去掉%n前后的空格。

【讨论】:

    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2014-06-27
    • 2016-04-16
    • 2021-02-24
    相关资源
    最近更新 更多