首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inet_ntop函数分段错误(可能是转换错误)

inet_ntop函数分段错误(可能是转换错误)
EN

Stack Overflow用户
提问于 2013-08-28 19:43:09
回答 3查看 705关注 0票数 1

我试图了解如何连接互联网插槽。(但im stuck.cause的分段故障。)我不明白为什么这段代码会产生分段错误:“你能帮我吗?”

代码语言:javascript
复制
int main()
{
    int status;
    WSADATA wsa;
    struct addrinfo hints ,*servinfo;
    struct sockaddr_in *servSock;
    char *ip4;

    /**initialization*/
    WSAStartup(MAKEWORD(2 ,0) ,&wsa);

    memset((void *)&hints ,NULL ,sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;

    ip4 = (char *)malloc(sizeof(char)*INET_ADDRSTRLEN);

    /**End of initialization*/

    status = getaddrinfo("www.google.com",DEF_PORT,&hints,&servinfo);
    checkErr("serv info" ,status ,0 ,equal ,gai_strerror);

    servSock = (struct sockaddr_in *)(servinfo->ai_addr);

    status = inet_ntop(AF_INET ,&(servSock->sin_addr) ,ip4,INET_ADDRSTRLEN);
    checkErr("ntop" ,status ,NULL ,nEqual ,gai_strerror);

    printf("IPv4 : %s",ip4);

    free(ip4);
    WSACleanup();
}

代码在inet_ntop行爆炸(idk为什么,导致im noob ^^ )

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-28 20:14:11

这样做可能会奏效:

代码语言:javascript
复制
unsigned char ip4buf[4];
memcpy(ip4buf,(struct sockaddr_in *)(servinfo->ai_addr)->sin_addr,4);
...
inet_ntop(AF_INET,(void *) (&ip4buf)ip4,INET_ADDRSTRLEN);
票数 0
EN

Stack Overflow用户

发布于 2013-08-28 20:22:36

您能否检查&(servSock->sin_addr)是否有效。

票数 1
EN

Stack Overflow用户

发布于 2013-08-29 19:43:53

我现在明白了。当您使用windows的. gai_strerror(int errno)使其不稳定,我们应该使用WSAGetLastError()函数。(gai_strerror更改了我的servinfo指针数据,-after测试了我的代码多次得到这个结果。)& msdn建议使用WSAGetLastError进行线程安全使用。

寻求任何帮助。&这是我对这个问题的说明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18496890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档