有没有一种好的方法可以使用
假设我有一个看起来像这样的字符串:
sscanf
循环遍历字符串?假设我有一个看起来像这样的字符串:
char line[] = "100 185 400 11 1000";
我想打印这些数字的总和。我真正想写的是:
int n, sum = 0;
while (1 == sscanf(line, " %d", &n)) {
sum += n;
line += <number of bytes consumed by sscanf>
}
但是没有简单的方法从sscanf
中获取这些信息。如果它返回了消耗的字节数,那就很有用了。在这种情况下,可以使用strtok
,但能够像从stdin
中做的那样编写一些类似的内容会更好:
int n, sum = 0;
while (1 == scanf(" %d", &n)) {
sum += n;
// stdin is transparently advanced by scanf call
}
我是否忘记了一个简单的解决方案?
%n
表示法,但它运行良好。请注意:%n
在printf()
中也存在,并具有类似的含义。这成为一个风险因素,因为它是一个在主要读取值的函数中的输出值。它也被 TR24731 的安全版本的printf()
禁止使用。并且%n
可以被那些管理程序格式字符串攻击的人以毁灭性的效果使用。 - Jonathan Lefflersscanf
格式字符串中的前导空格是否需要,因为%d
无论如何都会读取并丢弃任意数量的空格字符? - ajayprintf
时提到的TR24731
是什么? - ajay