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);
有一个大字符串。我想将它的不同部分存储在不同的变量中。不过好像不是我的理解不清楚,就是有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);