客户端程序中的分段错误

时间:2017-01-19 14:17:05

标签: c linux sockets

简单地执行以下操作会导致分段错误。 它可能是argv或argc的东西吗? 真丢了。提前谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>

#define MESSAGE "Not so important message"

int main(int argc, char * argv[])
{
    printf(argc);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

if(hp != NULL)
    {
    printf("Here 6");
    perror("Failed to get host by name!");
    exit(1);
    }

为什么要退出hp!=NULL?它应该是另一种方式。在错误检查后,您将取消引用空指针:

bcopy((char *)hp->h_addr, (char *) &server.sin_addr.s_addr, hp->h_length)

更改为:

if(hp == NULL)
    {
       perror("Failed to get host by name!");
       exit(1);
    }

答案 1 :(得分:0)

如果我不提供主机名作为参数,我只会遇到段错误。当你尝试使用argv [1]的参数调用gethostbyname时这是有意义的,如果没有提供参数,它将是一个NULL指针。

您没有看到任何printf()消息的原因是输出是缓冲的,如果您将它们更改为打印到stderr(默认情况下是无缓冲的),您将在segfault之前看到它们。