使用 inet_ntop() 和 inet_pton() 转换 IP 地址输入(C 编程)

问题描述 投票:0回答:2

我正在尝试转换用户输入的 IP 地址,以便我可以对其和已存储在结构中的地址执行一些按位操作。

我的问题是,当 IP 地址转换回来时,输出始终是

255.255.255.255
。例如,输入
10.0.0.1
192.16.2.1
始终返回
255.255.255.255

struct sockaddr_in sa;
char ipinput[INET_ADDRSTRLEN];

fputs("Enter an IP Address: ", stdout);
fflush(stdout);

fgets(ipinput, sizeof ipinput, stdin);
inet_pton(AF_INET, ipinput, &(sa.sin_addr));
inet_ntop(AF_INET, &(sa.sin_addr), ipinput, INET_ADDRSTRLEN);
printf("IP Address = \"%s\" \n", ipinput);
c sockets inet
2个回答
6
投票

您没有检查

inet_pton
返回的值,您会注意到它失败了。事实证明,它不喜欢
fgets
留下的换行符。修剪一下:

ipinput[strlen(ipinput) - 1] = 0;

0
投票

尝试遵循以下步骤:

inet_ntop(AF_INET, (void *)hent->h_addr_list[0],servIP,16);

inet_pton(AF_INET, hostIP, &(sa->sin_addr));
© www.soinside.com 2019 - 2024. All rights reserved.