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

ドキュメントから

ドット付きアドレスのコンポーネントは、10 進数、8 進数 (先頭に 0 を付ける)、または 16 進数 (先頭に 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 に答える