0
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: %s\n", hostName->h_name);

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

4

1 回答 1

1

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

你需要类似的东西:

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

您可以使用该herror()函数打印出解析器遇到的实际错误(尽管手册页表明该错误herror()已过时)。

于 2012-04-25T20:43:31.400 回答