使用inet_ntop()&转换IP地址输入inet_pton()(C PROGRAMMING)

时间:2013-03-17 19:19:57

标签: c sockets inet

我正在尝试转换用户输入的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);
        }

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

尝试遵循:

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

inet_pton(AF_INET, hostIP, &(sa->sin_addr));