2013-06-13 29 views
0

以下片段:警告:传递“的memcpy”的说法2使指针从整数没有施放[默认启用]

/* get IP address on a specific network interface */ 
    void get_ip_dev(char* ipaddr, char* interface) 
    { 
      int fd; 
      struct ifreq ifr; 
      fd = socket(AF_INET, SOCK_DGRAM, 0); 
      ifr.ifr_addr.sa_family = AF_INET; 
      strncpy(ifr.ifr_name, interface, IFNAMSIZ-1); 
      ioctl(fd, SIOCGIFADDR, &ifr); 
      close(fd); 
      memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)&(ifr.ifr_addr))->sin_addr), 20); 
    } 

我从memcpy警告,为什么呢?谢谢!

network.c: In function ‘get_ip_dev’: 
network.c:39:43: warning: passing argument 2 of ‘memcpy’ makes pointer from integer without a cast [enabled by default] 
/usr/include/string.h:44:14: note: expected ‘const void * __restrict__’ but argument is of type ‘int’ 

回答

2

它应该是一个简单的修复:您需要包括<arpa/inet.h>。编译器可能假设它返回int。

+0

要包含什么? – misteryes

+0

@misteryes我编辑了我的答案。 – ctn

+0

谢谢!什么返回'int'? – misteryes

0

这是因为第二个参数预计是一个地址位置。在你的情况下,它本身就是价值。

相关问题