c - 如何将字符串拆分一次?

标签 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);

谢谢!

最佳答案

做到:

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/

相关文章:

python : replace multiple occurrence of characater by one but single occurrence by none

c - K&R练习2.6位操作

c - 使用基于用户输入的循环来近似 e

c - 在 Windows/mingw 上,什么是 `fcntl(fd, F_GETFL) | O_ACCMODE` 的等价物?

javascript - 如何将单词变成整数

c - 为什么我的字符串不存储任何内容?

c - C程序结束时的段错误

c - Far在c语言中是什么意思?

java - 将 String.xml 中的数组字符串添加到 ArrayList

c++:如何将原始字符串传递给类似 evaluate( "2+2\0+2") 的函数?