简单地执行以下操作会导致分段错误。 它可能是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;
}
答案 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之前看到它们。