我的字符串有多个单词用逗号分隔,如
char str[]="K&R,c89,c99,c11";
我正在尝试使用sscanf()
将前两个单词读入单独的字符数组。
sscanf(str, "%[^,] s%[^,]s", str1, str2);
我打算sscanf()
浏览str
,直至到达,
,将其存储到str1
,继续扫描到另一个,
并存入{{} 1}}。
但价值仅存储在str2
,而str1
似乎有垃圾。
我尝试删除str2
之间的空格,如果它有任何意义,但它对输出没有影响。
我做错了什么?或者这对多个单词不可能?
我听说过用%[^,]s
做过类似的事情,但我想知道strtok()
是否可以用于此。
答案 0 :(得分:2)
Duh ..我花了一段时间才看到它。摆脱格式字符串中的s
。 字符类 [...]
取代s
并将s
放在那里,迫使sscanf
寻找 s
中的文字 str
,例如
#include <stdio.h>
#define MAX 8
int main (void) {
char str[]="K&R,c89,c99,c11";
char str1[MAX] = "";
char str2[MAX] = "";
if (sscanf(str, "%[^,],%[^,]", str1, str2) == 2)
printf ("str1 : %s\nstr2 : %s\n", str1, str2);
return 0;
}
示例使用/输出
$ ./bin/sscanfcomma
str1 : K&R
str2 : c89
另外,请考虑使用例如
保护您的阵列免受溢出 if (sscanf(str, "%7[^,],%7[^,]", str1, str2) == 2)