首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分段故障:在套接字编程中收到11

分段故障:在套接字编程中收到11
EN

Stack Overflow用户
提问于 2018-09-21 07:47:12
回答 1查看 282关注 0票数 0

嗨,我是套接字编程的新手,我正在尝试从我的客户端接收用户名。我目前在我的服务器文件中编写了以下方法:

代码语言:javascript
复制
/* 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;
}

我像这样调用我的函数:

代码语言:javascript
复制
/* 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]);上有人能解释一下并帮助我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 13:44:25

问题出在函数char *recv_msg(int sockfd)中的以下行

代码语言:javascript
复制
 memset(msg, 0, 8);

memset的函数原型如下:

代码语言:javascript
复制
void *memset(void *s, int c, size_t n);

memset函数将c的值(转换为无符号字符)复制到s所指向的对象的的前n个字符中。

在本例中,msg是一个未分配任何内存的char指针。

因此,您必须执行以下操作:

代码语言:javascript
复制
 char *msg;
 msg = malloc(8);
 memset(msg, 0, 8);

以后别忘了释放内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52434732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档