2017-05-13 6 views
0

これは私がしようとしているコードです:なぜinet_ntoaはこのコードで0.0.0.0を返しますか?

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdint.h> 
#include <string.h> 

int main(){ 
    uint8_t dip[4]={127,0,0,1}; 
    struct sockaddr_in serv_addr; 
    memset(&serv_addr, 0, sizeof(serv_addr)); 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_port = 5000; 
    memcpy(&serv_addr, dip, 4); 
    printf("IP: %s\n", inet_ntoa(serv_addr.sin_addr)); 

    return 0; 
} 

そして、これは私のターミナル

IP: 0.0.0.0 

私はその結果を取得した理由を私は理解していない上、最終的な結果です。誰がそれが起こっているか知っていますか?

+0

あなたは 'memcpy(&(serv_addr.sin_addr)、dip、4);'を意味しましたか? –

+1

http://stackoverflow.com/questions/20778771/what-is-the-difference-between-0-0-0-0-127-0-0-1-and-localhost –

+0

おっと...ありがとう! –

答えて

1

問題は(struct in_addrをネストされたとして)

あなたがターゲット部材を言及するのを忘れてしまった
memcpy(&serv_addr, dip, 4); 

であり、あなたの代わりに構造変数のアドレスを使用していました。それは好きですか

memcpy(&(serv_addr.sin_addr), dip, 4); 

となります。

関連する問題