sscanf 的工作

Working of sscanf

有一个大字符串。我想将它的不同部分存储在不同的变量中。不过好像不是我的理解不清楚,就是有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() 函数族中的 "%s" 说明符扫描所有字符,直到出现白色 space。

所以第一个 "%s" 正在消耗整个字符串,这就是为什么 j == 1,你必须在打印前检查 j 的值,因为所有其他参数都未初始化打印时刻。

您需要一个不同的格式说明符,即

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

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

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

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