7

inet_aton打算规范互联网地址的点版本?为什么我会为下面的示例得到不同的输出值?

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
4

1 回答 1

12

文档

点分地址的组成部分可以指定为十进制、八进制(以 0 开头)或 > 十六进制,以 0X 开头)

这意味着

char USER_IP[16] = "192.168.002.025";

意味着 192 168 2 (25 Octal == 21) 和

char USER_IP2[16] = "192.168.2.25";

意味着 192 168 2 25

于 2013-04-05T15:09:36.660 回答