gpt4 book ai didi

c - Strtok 和 Strcat 冲突

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:11 25 4
gpt4 key购买 nike

我正在尝试使用 strtok 和 strcat,但第二个 printf 从未出现。这是代码:

int i = 0;
char *token[128];
token[i] = strtok(tmp, "/");
printf("%s\n", token[i]);
i++;
while ((token[i] = strtok(NULL, "/")) != NULL) {
strcat(token[0], token[i]);
printf("%s", token[i]);
i++;
}

如果我的 tmp 输入是 1/2/3/4/5/6,那么控制台输出将是 13456。2 总是丢失。有谁知道如何解决这个问题?

最佳答案

两者总是缺失,因为在循环的第一次迭代中,您通过调用 strcat 覆盖了它。

进入循环后,您的缓冲区包含:“1\02\03/4/5/6”内部 strtok 指针指向“3”。 tokens[1] 指向“2”。

然后你调用 strcat: "12\0\03/4/5/6"所以你的 token[i] 指针指向 "\0"。第一次打印什么也没打印。

后续调用是可以的,因为空字符不会覆盖输入数据。

要修复它,您应该将输出字符串构建到第二个缓冲区中,而不是您正在解析的缓冲区中。

工作(?)版本:

#include <stdio.h>
#include <string.h>
int main(void)
{
int i = 0;
char *token[128];
char tmp[128];
char removed[128] = {0};
strcpy(tmp, "1/2/3/4/5/6");
token[i] = strtok(tmp, "/");
strcat(removed, token[i]);
printf("%s\n", token[i]);
i++;
while ((token[i] = strtok(NULL, "/")) != NULL) {
strcat(removed, token[i]);
printf("%s", token[i]);
i++;
}
return (0);
}

关于c - Strtok 和 Strcat 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7419642/

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