有一个大字符串。我想在不同的变量中存储不同的部分。但似乎我的理解不清楚或存在错误。请帮忙。
这是我的代码部分。
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的垃圾值。
我该如何解决这个问题?
答案 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);