为什么inet_ntoa在此代码中返回0.0.0.0?

时间:2017-05-13 02:39:03

标签: c structure memcpy

这是我尝试的代码:

#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

我不明白为什么我得到了这个结果。有谁知道它发生了什么?

1 个答案:

答案 0 :(得分:1)

问题在于

  memcpy(&serv_addr, dip, 4);

如果您忘记提及目标成员(作为嵌套struct in_addr),则使用结构变量地址。这样做

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

它应该有用。