gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:27:45 24 4
gpt4 key购买 nike

我想在第一个空格字符处将字符串分成两部分。例如,我有一个字符串“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com