您好,我是套接字编程的新手,我试图从我的客户端接收用户名。我目前在服务器文件中编写了以下方法:
/* Reads a message from the server socket. */
char *recv_msg(int sockfd)
{
char *msg;
/* All messages are 9 bytes. */
memset(msg, 0, 8);
int n = read(sockfd, msg, 8);
if (n < 1 || n >9) /* Not what we were expecting. Server got killed or the other client disconnected. */
error("ERROR reading message from server socket.");
return msg;
}
我正在这样调用我的函数:
/* Authentication Process */
write(cli_sockfd[num_conn], "USN", sizeof(int));
char *username;
username = recv_msg(cli_sockfd[num_conn]);
printf("[DEBUG] Client username is %s.\n", username);
我知道客户端成功接收到“ USN”消息,但我收到“细分错误:11”,我相信在username = recv_msg(cli_sockfd[num_conn]);
上有人可以解释为什么吗?
答案 0 :(得分:0)
问题出在函数char *recv_msg(int sockfd)
中的以下行
memset(msg, 0, 8);
memset
的函数原型是:
void *memset(void *s, int c, size_t n);
memset函数将c的值(转换为无符号字符)复制到 指向的对象的前n个字符中的每一个。
在您的情况下,msg
是char
指针,尚未分配任何内存。
因此,您必须执行以下操作:
char *msg;
msg = malloc(8);
memset(msg, 0, 8);
别忘了稍后释放内存。