将IP地址转换为文本格式时出现分段错误

时间:2014-04-07 21:11:01

标签: c linux berkeley-sockets

我正在尝试将连接到我的服务器的任何客户端的IP地址转换为文本格式,如下所示:

    struct sockaddr_in *client_addr = NULL;
    socklen_t addrlen = sizeof(struct sockaddr_in);
    char client_ip[INET_ADDRSTRLEN];

    printf("Waiting for incomming connections!\n");
    if ((client.fd = accept(server_fd, (struct sockaddr *) client_addr, &addrlen)) < 0)
    {
        perror("Accept() API failed.");
        continue;
    }

    // Convert Client address from binary to text.
    strcpy(client_ip, inet_ntoa(client_addr->sin_addr));

当我运行上一个代码时,我得到Segmentation fault(core dumped)。

我也用以下内容替换了最后一行,但我得到了同样的错误:

    inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN);

那么问题是什么?

2 个答案:

答案 0 :(得分:3)

您尚未为client_addr分配内存。  它可能只是

struct sockaddr_in client_addr

而不是

 struct sockaddr_in *client_addr = NULL;

答案 1 :(得分:2)

看起来你必须为client_addr(使用malloc)

分配空间

答案中有一些代码: How to map sockaddr_in C Structure to Java using SWIG