用逗号分隔符和sscanf分隔整数

时间:2013-12-05 20:54:35

标签: c comma scanf separator

我需要sscanf的帮助。 我有一个数据文件。我逐行阅读。 一行看起来像这样:23,13,45;

我想读整数。 我试试这段代码:

unsigned char a,b,c;
sscanf(line,"%d,%d,%d;",&a,&b,&c);

但这不起作用,只读取第一个数字,其他数字为0。

2 个答案:

答案 0 :(得分:1)

unsigned char的正确格式说明符为%hhu

除此之外,只要line确实包含您期望的格式的字符串,我就不会发现任何问题。

答案 1 :(得分:1)

这是因为%d需要一个指向4字节整数的指针,并且您正在将指针传递给1字节char。由于变量abc按照减少内存地址的顺序存储,sscanf首先填充a 23,同时填充3带零的堆栈内存的其他字节(这是一个内存违规,BTW)。然后用{13}填充b,用零填充a和另外两个字节。最后,它将c填充为45,同时填充ab以及另一个带零的字节。这样,您最终会在ba中使用零,并且仅在c中使用预期值。

当然,这只是可能发生的一种情况,因为它取决于架构和编译器。

读取4个整数的正确方法是使用int代替unsigned char,或更改格式说明符。