net_ntoa,struct sockaddr_in和指针强制转换

时间:2013-04-09 08:41:08

标签: c network-programming

以下代码段中的第三行:

char cli_ip[20];
struct sockaddr cliaddr;
.......
memcpy(cli_ip, inet_ntoa(((struct sockaddr_in *)cliaddr)->sin_addr), 20);

我收到了错误:

  

udp_receiver.c:96:41:错误:无法转换为指针类型   udp_receiver.c:96:41:警告:传递'memcpy'的参数2   没有强制转换的整数指针[默认启用]   /usr/include/string.h:44:14:注意:预期'const void *   限制'但参数的类型为'int'

这是什么原因?

1 个答案:

答案 0 :(得分:1)

你是否适当地包括了标题?

inet_ntoa的人建议关注

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

编译器可能无法找到inet_ntoa的原型并假设它返回int,然后在memcpy中发出警告。