gpt4 book ai didi

c - 写入h_addr_list

转载 作者:行者123 更新时间:2023-11-30 15:44:53 28 4
gpt4 key购买 nike

我正在为 gethostbyname() 函数编写一个包装器,该函数在返回指向 hostent 结构的指针之前,应该允许执行 getaddrinfo() 并最终将返回的 IPv6 结构映射到 IPv4 结构。但是,我在正确转换返回的 in_addr 结构以填充 hostent 地址的 h_addr_list 时遇到问题 - 万一家族识别出当然等于 AF_INET

我基本上做了以下事情:

strcpy(&s[0],name);
hp->h_name = strdup(s);
hp->h_addrtype = AF_INET;
hp->h_length = sizeof(struct in_addr);
struct sockaddr *sa= res->ai_addr;

// Segmentation fault:
memcpy(hp->h_addr_list[0], &(((struct sockaddr_in *)sa)->sin_addr.s_addr), hp->h_length);

有什么提示吗?我已经很长时间没有写过任何 C 代码了,如果我问了一个愚蠢的问题,我很抱歉。谢谢。

最佳答案

s_addr 成员(例如 saddr->sin_addr.s_addr)不是指针。您必须使用取址运算符使其成为指针。

并且 hp->h_addr_list[0] 一个指针,所以当你在这里使用地址操作符时,你会得到该指针的地址,并将复制到完全错误的地址。

关于c - 写入h_addr_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19293286/

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