2017-05-13 16 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-0-127-0-0-1-localhost –

+0

아 ... 고맙습니다. ! –

답변

1

문제는 (struct in_addr 중첩 된 바와 같이) 목표 부재를 깜빡하고

memcpy(&serv_addr, dip, 4); 

는 대신 구조를 가변 어드레스를 사용이다. Do do like

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

과 같아야합니다.