使用基于分隔符的sscanf()读取多个字符串

时间:2017-09-10 08:01:17

标签: c string scanf

我的字符串有多个单词用逗号分隔,如

char str[]="K&R,c89,c99,c11";

我正在尝试使用sscanf()将前两个单词读入单独的字符数组。

sscanf(str, "%[^,] s%[^,]s", str1, str2);

我打算sscanf()浏览str,直至到达,,将其存储到str1,继续扫描到另一个,并存入{{} 1}}。

但价值仅存储在str2,而str1似乎有垃圾。

我尝试删除str2之间的空格,如果它有任何意义,但它对输出没有影响。

我做错了什么?或者这对多个单词不可能?

我听说过用%[^,]s做过类似的事情,但我想知道strtok()是否可以用于此。

1 个答案:

答案 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)