格式说明符%n不返回字符数

时间:2016-04-06 17:54:19

标签: c scanf stdio format-specifiers

首先,我想说清楚我是初学者,这可能是一个愚蠢的问题,而且我可能做错了。

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

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

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

问题似乎出现在[^,]子说明符中%n正常工作,没有它。

1 个答案:

答案 0 :(得分: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