2013-04-05 108 views
7

不規範inet_aton假設規範化互聯網地址的網點版本?爲什麼我會在下面的例子中得到不同的輸出值?inet_aton IPv4地址規範化

int main(){ 
    char USER_IP[16] = "192.168.002.025"; 
    char USER_IP2[16] = "192.168.2.25"; 
    struct sockaddr_in addr; 
    struct sockaddr_in addr2; 

    inet_aton(USER_IP2, &addr.sin_addr); 
    inet_aton(USER_IP, &addr2.sin_addr); 

    printf("addr.sin_addr:%lu\n", addr.sin_addr); 
    printf("addr2.sin_addr:%lu\n", addr2.sin_addr); 


    return 0; 
} 

輸出:

addr.sin_addr:419604672 
addr2.sin_addr:352495808 

回答

12
從虛線地址的 documentation

部件

可以用十進制來指定,八進制(帶有前導0),或>十六進制,具有領先的0X)

這意味着

char USER_IP[16] = "192.168.002.025"; 

意味着192 168 2(25八進制== 21)和

char USER_IP2[16] = "192.168.2.25"; 

意味着192 168 2 25