gpt4 book ai didi

通过换行符错误使用 strtok 拆分 C 字符串

转载 作者:行者123 更新时间:2023-12-02 06:19:16 25 4
gpt4 key购买 nike

我在按换行符拆分字符串时遇到问题。

这个想法是服务器正在向客户端发送一条消息,客户端通过其他 2 个字符串中的换行符拆分消息

我收到段错误。

这是接收、拆分和输出结果的客户端部分。

    char response[256];

rc = read(sockfd, &response, 256);

printf("The response is: %s\n", response);//prints the string in 2 lines

char * pch;
pch = strtok (response, "\n");

printf("Part 1 -> %s\n\n", pch); // ERROR

pch = strtok (NULL, "\n");
printf("Part 2 -> %s\n\n", pch);

错误信息显示:

Segmentation fault (core dumped)

最佳答案

可能是 (a) response 未初始化且 (b) read() 函数未读取字符串中的终止 null。为了演示,请使用:

int rc = read(sockfd, response, sizeof(response));

printf("The response is: %.*\n", rc, response);

printf() 语句中使用它之前,您真的应该检查 rc 既不是负数(读取失败)也不是零(EOF),并且您需要在将它传递给 strtok() 等之前 null 终止,所以也许更好的处理方法是:

int rc = read(sockfd, response, sizeof(response)-1);

if (rc <= 0)
...error or EOF...

response[rc] = '\0';

I still get the error...

您已将错误发生的代码标记为:

char *pch;
pch = strtok(response, "\n");

printf("Part 1 -> %s\n\n", pch); // ERROR

发生核心转储的最合理原因是 pch 包含一个空指针。因此,为了保护您自己,请测试 strtok() 的结果:

char *pch = strtok(response, "\n");

if (pch == 0)
printf("strtok() failed\n");
else
printf("Part 1 -> %s\n\n", pch);

您应该确保如果pch 为空,您就不会继续使用它。

你没有显示rc的声明;如果它是 unsigned char rc,则 255 值可能表示从 read() 调用返回的 -1。

此外,我展示的代码假定 response() 的定义作为数组可见(在文件范围或函数范围内,而不是作为函数的参数)。当数组为函数参数时,sizeof(response)返回的值与sizeof(char *)相同,一般不是数组的大小。

关于通过换行符错误使用 strtok 拆分 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775778/

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