c - sscanf 的工作

标签 c scanf

有一个大字符串。我想将它的不同部分存储在不同的变量中。不过好像不是我的理解不清楚,就是有bug。请帮忙。

这是我的代码部分。

char sample[] = "abc,batsman,2,28.0,1800";

char name[10] ,speciality[10];
float batavg;
int pos, runs,j;

j = sscanf(sample,"%s,%s,%d,%f,%d", name, speciality, pos, batavg, runs);

printf("%s,%s,%d,%f,%d", name, speciality, pos, batavg, runs);
printf("\n%d\n",j);

输出

显示了上述情况下j = 1 的一些垃圾值。

我该如何解决?

最佳答案

scanf() 函数系列要求您将指针 传递到应存储扫描字段的位置。这只适用于扫描到 char 数组(字段描述符 %s),因为 char 数组的名称被转换为自动指针,但对于其他类型的字段,您需要使用寻址运算符 (&)。

此外,正如 iharob 最初观察到的,%s 描述符期望字段由空格分隔。你可以通过 %[] 描述符得到你想要的:

j=sscanf(sample,"%[^,],%[^,],%d,%f,%d",name,speciality,&pos,&batavg,&runs);

关于c - sscanf 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721752/

相关文章:

c - C语言中将数组一分为二

c - 在内核 3.10 上使用 netpoll

c - 提供函数指针时取消引用指向不完整类型的指针

c - 循环重复 printf 但不重复 scanf

c - gnu cflow - 无法识别 "typedef struct"

c - ANSI C - 初始化数组

c - 关于C中检测行尾的说明

c - 我的 'scanf' 循环没有停止;当条件不工作时

c - 使用 scanf 解析字符串

您可以使用 scanf 测试 _Bool 类型的有效输入吗?关于 C