为什么在这段代码中 inet_ntoa returns 0.0.0.0?
Why inet_ntoa returns 0.0.0.0 in this code?
这是我正在尝试的代码:
#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
我不明白为什么我会得到那个结果。有谁知道这是怎么回事?
问题出在
memcpy(&serv_addr, dip, 4);
在您忘记提及目标成员(嵌套 struct in_addr
)的地方,您使用了结构变量地址。喜欢
memcpy(&(serv_addr.sin_addr), dip, 4);
它应该可以工作。
这是我正在尝试的代码:
#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
我不明白为什么我会得到那个结果。有谁知道这是怎么回事?
问题出在
memcpy(&serv_addr, dip, 4);
在您忘记提及目标成员(嵌套 struct in_addr
)的地方,您使用了结构变量地址。喜欢
memcpy(&(serv_addr.sin_addr), dip, 4);
它应该可以工作。