0

次のスニペットの場合:

    /* 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’
4

2 に答える 2

2

これは簡単な修正である必要があります: を含める必要があります<arpa/inet.h>。コンパイラは、おそらく int を返すと想定しています。

于 2013-06-13T00:05:49.923 に答える
0

これは、2 番目の引数がアドレスの場所であると想定されているためです。あなたの場合、それは値そのものです。

于 2014-11-19T09:21:15.573 に答える