我需要sscanf的帮助。 我有一个数据文件。我逐行阅读。 一行看起来像这样:23,13,45;
我想读整数。 我试试这段代码:
unsigned char a,b,c;
sscanf(line,"%d,%d,%d;",&a,&b,&c);
但这不起作用,只读取第一个数字,其他数字为0。
答案 0 :(得分:1)
unsigned char
的正确格式说明符为%hhu
。
除此之外,只要line
确实包含您期望的格式的字符串,我就不会发现任何问题。
答案 1 :(得分:1)
这是因为%d
需要一个指向4字节整数的指针,并且您正在将指针传递给1字节char
。由于变量a
,b
和c
按照减少内存地址的顺序存储,sscanf
首先填充a
23,同时填充3带零的堆栈内存的其他字节(这是一个内存违规,BTW)。然后用{13}填充b
,用零填充a
和另外两个字节。最后,它将c
填充为45,同时填充a
和b
以及另一个带零的字节。这样,您最终会在b
和a
中使用零,并且仅在c
中使用预期值。
当然,这只是可能发生的一种情况,因为它取决于架构和编译器。
读取4个整数的正确方法是使用int
代替unsigned char
,或更改格式说明符。