0
#include <netdb.h>
#include <stdio.h>
#include <sys/socket.h>
int main(int argc, char **argv)
{
    char *ptr = NULL;
    struct hostent *hptr = NULL;
    struct in_addr *hipaddr = NULL;
    ptr = argv[1];
    inet_aton(ptr,hipaddr);
    hptr = gethostbyaddr(hipaddr, 4, AF_INET);
    printf("official hostname:%s\n",hptr->h_name);
    return 0;
}

运行结果显示:segmentation fault (core dumped)。但我不知道如何使它工作。所以我需要一些帮助......

我将代码更改为:

#include <netdb.h>
#include <stdio.h>
#include <sys/socket.h>
int main(int argc, char **argv)
{
char *ptr = NULL;
struct hostent *hptr = NULL;
struct in_addr hipaddr ;

ptr = argv[1];
inet_aton(ptr,&hipaddr);
hptr = gethostbyaddr(&hipaddr, sizeof(hipaddr), AF_INET);
printf("official hostname:%s\n",hptr->h_name);
return 0;
}

然后它起作用了!但为什么呢?

4

1 回答 1

3

在第一个版本中,您将空指针传递给inet_aton. 然后inet_aton尝试写入该地址并导致段错误。

inet_aton(ptr,hipaddr);//hipaddr is NULL

in_addr调用时需要将指针传递给结构inet_aton。这就是你在第二个版本中所做的。

struct in_addr hipaddr;
inet_aton(ptr, &hipaddr);&hipaddr is a pointer to struct in_addr
于 2013-03-30T12:43:41.357 回答