如何拆分字符串一次?

时间:2011-09-07 04:41:14

标签: c string

我想在第一个空格字符处将字符串分成两部分。例如,我有一个字符串“Hay Guys LOL”,当分割时,“Hay”应该在一个变量中,而“Guys LOL”在另一个变量中。

我已经研究过像strtok这样的函数 - 它有效,但我不想循环然后组合字符串。

这是我目前所拥有的(尝试sscanf):

char test[32];
strcpy(test, "Hay Guys LOL\r\n");

// p1 should have "Hay", and p2 have "Guys LOL"?
char p1[16], p2[16];
sscanf(test, "%s %s\r\n", p1, p2);

printf("p1: %s\n", p1);
printf("p2: %s\n", p2);

谢谢!

1 个答案:

答案 0 :(得分:2)

成功:

sscanf(test, "%s %[^\r\n]", p1, p2);

第一个%s只会读取第一个字符串,直到第一个空白区域为“Hay”。接下来,扫描集将一直显示,直到'\r''\n' > 在字符串中找不到^ []反转该集合。因此,%[^\r\n]会将字符串的其余部分读入p2

<强>更新

正如@Adam Rosenfield所说,为避免缓冲区溢出,您需要限制p1p2放置sscanf的字符数。您可以指定%10[^\r\n]%10s等字符数。因为这些数字需要是格式字符串的一部分,所以您可能希望在使用之前动态生成格式字符串。

char format_string[MAX];

sprintf (format_string, "%%%ds %%%d[^\\r\\n]", 10, 10);

sscanf (test, format_string, p1, p2);

首先制作长度限制的格式字符串,然后使用它。请注意转义字符。 %%用于在输出中打印单个%\\用于在输出字符串中打印单个\