gpt4 book ai didi

c - 为客户端收到的消息出现段错误

转载 作者:行者123 更新时间:2023-12-01 22:26:49 25 4
gpt4 key购买 nike

我正在编写一个简单的客户端-服务器程序。我的服务器收到一条消息并将其打印到标准输出中。

客户端代码:

...
int message_length = strlen(message);
sent_bytes = send(socket, &message_length, sizeof(int), 0);
<... check ...>
sent_bytes = send(socket, message, strlen(message)*sizeof(char), 0);
<... check ...>
...

服务器代码:

...
got_bytes = recv(socket, &message_length, sizeof(int), 0);
<... check ...>
message = malloc( (message_length+10)*sizeof(char));
got_bytes = recv(socket, &message, message_length*sizeof(char), 0);
<... check ...>
printf("Length: %d\n", message_length);
strcat(message, '\0');
printf("%s\n", message);
...

执行:

$ ./client Message!

$ ./server
Length: 8
Segmentation fault

为什么会发生这种情况?

最佳答案

问题的症结在这里:strcat(message, '\0');

strcat接受两个字符串作为参数,而\0不是字符串,而是字符。此外,如果 message 尚未以 \0 空终止,则 strcat 将失败,因为它将查找 的末尾>消息通过寻找空终止符,以便找出在哪里附加右侧参数。因此,甚至 strcat(message, "") 也不起作用。

可能适合您的解决方案如下:在客户端部分,将 send 部分更改为发送 strlen(message) + 1 字节。假设生成 message 时,message 在客户端以 null 终止符结尾,这将导致 send 操作将 null 终止符发送为好吧,服务器会收到它。然后您可以完全删除 strcat(message, '\0') 代码段。

编辑:您还需要将服务器部分调整为 recv 一个额外字节的 message,以获取空终止符。

关于c - 为客户端收到的消息出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20619346/

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