C语言 为什么这个主机会导致段错误


struct hostent *hostName;
struct in_addr ipv4addr;
inet_pton(AF_INET, inet_ntoa(client.sin_addr), &ipv4addr);
hostName = gethostbyaddr(&ipv4addr, sizeof(ipv4addr), AF_INET);
printf("Host name: %sn", hostName->h_name);

它在最后一行出现段错误。我查找了hostent的正确用法,msdn文档显示它完全像这样使用。什么会导致段错误?

gethostbyaddr()函数在发生错误时返回NULL,我没有看到您在代码中检查它。 尝试取消引用NULL指针将导致段错误。

你需要这样的东西:

if (hostName == NULL) {
  printf("There was an error!n");
  exit(1);
}

您可以使用 herror() 函数打印出解析程序遇到的实际错误(尽管手册页指示herror()已过时)。

最新更新