我想在第一个空格字符处将字符串分成两部分。例如,我有一个字符串“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);
谢谢!
最佳答案
做到:
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);
上面有长度限制的格式字符串是先制作出来的,然后再使用。请注意转义字符。 %%
用于打印单个%
在输出中和 \\
用于打印单个\
在输出字符串中。
关于c - 如何将字符串拆分一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328921/