gpt4 book ai didi

c - 使用 gethostbyaddr() 时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:52 24 4
gpt4 key购买 nike

#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;
}

然后就可以了!但为什么呢?

最佳答案

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

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

当您调用inet_aton 时,您需要传递一个指向in_addr 结构的指针。这就是您在第二个版本中所做的。

struct in_addr hipaddr;
inet_aton(ptr, &hipaddr);&hipaddr is a pointer to struct in_addr

关于c - 使用 gethostbyaddr() 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com