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

Posted

技术标签:

【中文标题】用逗号分隔符和 sscanf 分隔整数【英文标题】:Separated integers with comma delimiters and sscanf 【发布时间】:2013-12-05 20:54:34 【问题描述】:

我需要 sscanf 方面的帮助。 我有一个数据文件。我逐行阅读。 一行是这样的:23,13,45;

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

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

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

【问题讨论】:

【参考方案1】:

这是因为%d 需要一个指向 4 字节整数的指针,而您正在传递一个指向 1 字节 char 的指针。因为变量abc是按照内存地址从小到大的顺序存储的,所以sscanf首先用23填充a,同时用零填充栈内存的其他3个字节(这是内存违规,顺便说一句)。然后它用 13 填充b,还用零填充a 和另外两个字节。最后它用 45 填充c,还用零填充ab 以及另一个字节。这样一来,ba 中的值都为零,而 c 中只有一个期望值。

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

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

【讨论】:

【参考方案2】:

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

除此之外,只要line 包含您期望的格式的字符串,我看不出任何问题。

【讨论】:

对于%d sscanf() 需要signed int*,但您将指针传递给unsigned char,即undefined behaviour。

以上是关于用逗号分隔符和 sscanf 分隔整数的主要内容,如果未能解决你的问题,请参考以下文章

【js】金钱格式化(每三位逗号分隔)的方法

iOS 数字每隔3位用逗号分隔

ruby 转换由浮点分隔的逗号分隔的数字整数或浮点数

用pyton回答请输入3个小数,用print()函输出3个数,数之间用逗号分隔?

C#如何检测包含逗号分隔的整数列表的变量?

正则表达式匹配两个或多个逗号分隔的整数