【发布时间】:2017-10-15 05:23:26
【问题描述】:
我想使用 sscanf 的宽度选项 (http://en.cppreference.com/w/c/io/fscanf) 来控制要读取的最大字节数。但以下读取超过 3 个字节。
#include <stdio.h>
int main() {
long long ll;
char str[4];
int pos;
sscanf(" 281", "%3llx%n", &ll, &pos);
printf("%llx %d\n", ll, pos);
sscanf(" 281", "%3s%n", &str, &pos);
printf("%s %d\n", str, pos);
return 0;
}
它打印出以下内容。
281 4
281 4
我以为它会打印出来
28 3
28 3
这是 sscanf 的正确用法吗? fscanf 以类似的方式工作。
【问题讨论】:
-
宽度是指单个字段。
-
@AdrianoRepetti 我不知道它是否可以按我的预期工作。我的目标是以某种格式读取接下来的 3 个字节。 sscanf 是否总是忽略空格并计算空格后的 3 个字节?
-
不,宽度不适用于整个格式字符串,而是适用于单个特定字段(您可以在不同字段中指定多个宽度)。如果您想要原始字节数,您可以读取字符串(以便稍后解析)
-
@AdrianoRepetti sscanf 中的字段是用空格分隔的吗?
-
也许
%3[ 0-9]就是你想要的。