2013-03-17 147 views
4

我试图转换一个IP地址,这是由用户输入的,以便我可以对其执行一些按位操作,并且地址已存储在一个结构。但是,我的问题是,当IP地址转换回来时,输出总是255.255.255.255。例如,10.0.0.1或192.16.2.1的输入总是返回255.255.255.255。使用inet_ntop()&inet_pton()(C编程)转换IP地址输入

任何帮助,将不胜感激。感谢

{ 
     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); 
     } 

回答

3

你没有检查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));