Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gethostbyaddr()时出现分段错误 #包括 #包括 #包括 int main(int argc,字符**argv) { char*ptr=NULL; 结构hostent*hptr=NULL; _addr*hipaddr中的结构=NULL; ptr=argv[1]; 内特阿顿(ptr、HIPADD); hptr=gethostbyaddr(hipaddr,4,AF_INET); printf(“官方主机名:%s\n”,hptr->h\u名称); 返回0; }_C_Segmentation Fault_Coredump_Gethostbyaddr - Fatal编程技术网

使用gethostbyaddr()时出现分段错误 #包括 #包括 #包括 int main(int argc,字符**argv) { char*ptr=NULL; 结构hostent*hptr=NULL; _addr*hipaddr中的结构=NULL; ptr=argv[1]; 内特阿顿(ptr、HIPADD); hptr=gethostbyaddr(hipaddr,4,AF_INET); printf(“官方主机名:%s\n”,hptr->h\u名称); 返回0; }

使用gethostbyaddr()时出现分段错误 #包括 #包括 #包括 int main(int argc,字符**argv) { char*ptr=NULL; 结构hostent*hptr=NULL; _addr*hipaddr中的结构=NULL; ptr=argv[1]; 内特阿顿(ptr、HIPADD); hptr=gethostbyaddr(hipaddr,4,AF_INET); printf(“官方主机名:%s\n”,hptr->h\u名称); 返回0; },c,segmentation-fault,coredump,gethostbyaddr,C,Segmentation Fault,Coredump,Gethostbyaddr,运行结果表明:分段故障(堆芯倾倒)。 但我不知道怎么做,所以我需要一些帮助 我将代码更改为: #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

运行结果表明:分段故障(堆芯倾倒)。 但我不知道怎么做,所以我需要一些帮助

我将代码更改为:

#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;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
char*ptr=NULL;
结构hostent*hptr=NULL;
结构中的地址hipaddr;
ptr=argv[1];
内特阿顿(ptr和HIPADD);
hptr=gethostbyaddr(&hipaddr,sizeof(hipaddr),AF_INET);
printf(“官方主机名:%s\n”,hptr->h\u名称);
返回0;
}

那就行了!但是为什么呢?

在第一个版本中,您将空指针传递到
inet\u aton
。然后,
inet\u aton
尝试写入该地址,从而导致SEG故障

#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\u aton
时,需要在\u addr结构中传递指向
的指针。这就是你在第二个版本中所做的

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

在第一个版本中,将空指针传递给
inet\u aton
。然后,
inet\u aton
尝试写入该地址,从而导致SEG故障

#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\u aton
时,需要在\u addr
结构中传递指向
的指针。这就是你在第二个版本中所做的

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

谢谢你的帮助。下面的两个程序怎么样?你不能一直在现有问题上添加越来越多的问题。我回答了你问的问题。如果你有更多,问一个新问题。我回滚了编辑,使此问题保持其原始形式。值得注意的是,这两个程序之间的区别在于,一个使用字符串文本作为URL,另一个使用
argv[1]
。所以想必
argv[1]
包含了URL以外的内容。很抱歉。这是我第一次使用此网站来解决我的问题,因此我不了解详细的规则。毕竟,感谢您的帮助。没关系。另一段代码肯定失败了,因为您没有传递命令行参数,所以argv[1]为NULL。如果这回答了你的问题,你可以考虑接受答案。这是我们在这里的另一个惯例。谢谢你的接受,我希望你现在掌握了这一切!谢谢你的帮助。下面的两个程序怎么样?你不能一直在现有问题上添加越来越多的问题。我回答了你问的问题。如果你有更多,问一个新问题。我回滚了编辑,使此问题保持其原始形式。值得注意的是,这两个程序之间的区别在于,一个使用字符串文本作为URL,另一个使用
argv[1]
。所以想必
argv[1]
包含了URL以外的内容。很抱歉。这是我第一次使用此网站来解决我的问题,因此我不了解详细的规则。毕竟,感谢您的帮助。没关系。另一段代码肯定失败了,因为您没有传递命令行参数,所以argv[1]为NULL。如果这回答了你的问题,你可以考虑接受答案。这是我们在这里的另一个惯例。谢谢你的接受,我希望你现在掌握了这一切!