【问题标题】:Format specifier %n not returning the count of characters [closed]格式说明符 %n 不返回字符数 [关闭]
【发布时间】:2016-07-27 07:20:48
【问题描述】:

首先,我想明确表示我是初学者,这可能是一个愚蠢的问题,而且我可能做错了什么。

我想从字符串中读取字符,直到找到 , 并将它们存储在另一个字符串中。我也想知道读了多少字。这就是我对sscanf 所做的事情:

sscanf(str, "%[^,]s %n ", newstr, &number);

当我尝试打印数字时,无论我的输入如何,它都会打印0,即使newstr 中存储了多个字符。

问题似乎出在[^,] 子说明符中,因为%n 在没有它的情况下可以正常工作。

【问题讨论】:

  • 你编译时有警告吗? number 的类型是什么?
  • 我确实在编译时出现了警告。数字是一个整数。
  • 从格式中删除s。不属于%[]
  • 当然s 的存在只是因为您认为您正在阅读s字符串。但是%[^,] 已经读取了一个字符串。

标签: c scanf stdio format-specifiers


【解决方案1】:

我想从字符串中读取字符,直到找到“,”并将它们存储在另一个字符串中。我也想知道读了多少个字符。

不需要s。它不是"%[^,]" 说明符的一部分。尾随的" " 也没有任何作用。也应该限制输入长度。不要使用newstr,除非代码知道它已被填充。

char str[100];
int number = 0;

// sscanf(str, "%[^,]s %n ", newstr, &number);
sscanf(str, "%99[^,], %n", newstr, &number);

if (number) Success();
else Fail();  // do not use newstr

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 2011-12-28
    • 2018-05-23
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多