我想在第一个空格字符处将字符串分成两部分。例如,我有一个字符串“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);
谢谢!
答案 0 :(得分:2)
成功:
sscanf(test, "%s %[^\r\n]", p1, p2);
第一个%s
只会读取第一个字符串,直到第一个空白区域为“Hay”。接下来,扫描集将一直显示,直到'\r'
或'\n'
> 在字符串中找不到^
[]
反转该集合。因此,%[^\r\n]
会将字符串的其余部分读入p2
。
<强>更新强>
正如@Adam Rosenfield所说,为避免缓冲区溢出,您需要限制p1
和p2
放置sscanf
的字符数。您可以指定%10[^\r\n]
和%10s
等字符数。因为这些数字需要是格式字符串的一部分,所以您可能希望在使用之前动态生成格式字符串。
char format_string[MAX];
sprintf (format_string, "%%%ds %%%d[^\\r\\n]", 10, 10);
sscanf (test, format_string, p1, p2);
首先制作长度限制的格式字符串,然后使用它。请注意转义字符。 %%
用于在输出中打印单个%
,\\
用于在输出字符串中打印单个\
。