sscanf的工作

时间:2015-04-18 19:22:48

标签: c scanf

有一个大字符串。我想在不同的变量中存储不同的部分。但似乎我的理解不清楚或存在错误。请帮忙。

这是我的代码部分。

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的垃圾值。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

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

此外,正如iharob首次观察到的那样,%s描述符期望字段由空格分隔。您可以通过%[]描述符获得所需内容:

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

答案 1 :(得分:1)

* "%s"函数族中的scanf()说明符会扫描所有字符,直到出现空格。

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

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

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