C语言函数返回指针数组问题

主要是返回第九行定义的ip和mac,现在程序存在问题,返回的数值只有单个字符而不是字符串。

img

如果使用第十行和十一行的定义,则函数里面输出的数值全部是错的。

img

正确输出应该是

remac:img

请大家帮忙!感谢!


char *getinformation(int ipmac){
        struct ifreq *ifr, *ifend;
        struct ifreq ifreq;
        struct ifconf ifc;
        struct ifreq ifs[MAX_IFS];
        int sockfd,k,i,j;
        char rip[8],zip[19],zmac[30];
        static char *ip[4],*mac[6];
//      char *ip=(char *)malloc(sizeof(char)*4);
//      char *mac=(char *)malloc(sizeof(char)*6);
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        ifc.ifc_len = sizeof(ifs);
        ifc.ifc_req = ifs;
        if(ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
                printf("ioctl(SIOCGIFCONF): %m/n");
                return 0;
        }
        ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq));
        for (ifr = ifc.ifc_req+1; ifr < ifend; ifr++) {
                if (ifr->ifr_addr.sa_family == AF_INET) {
                        strncpy(ifreq.ifr_name, ifr->ifr_name,sizeof(ifreq.ifr_name));
                        if (ioctl (sockfd, SIOCGIFHWADDR, &ifreq) < 0) {
                                printf("SIOCGIFHWADDR(%s): %m/n", ifreq.ifr_name);
                                return 0;
                        }
                        sprintf(rip,"%x",k);


                }
        }


        if(ipmac=0)
        {
                for(i=0,j=0;j<24&&i<4;j+=4,i++)
                {
                        memcpy(ip+i,zip+j,4);
                }
                for(i=0;i<4;i++)
                {
                        printf("ip[%d]:%s\n",i,ip+i);
                }
                return ip;
        }
        else
        {
                for(i=0,j=0;j<24&&i<6;j+=4,i++)
                {
                        memcpy(mac+i,zmac+j,4);
                }
                for(i=0;i<6;i++)
                {
                        printf("mac[%d]:%s\n",i,mac+i);
                }
        //      printf(",*mac:%s\n",**mac);
                return mac;
        }
#include<stdio.h>
int main()
{
        char *revip,*remac;
        revip=getinformation(0);
        remac=getinformation(1);
         printf("remac:%s\n",remac);
        printf("revip:%s\n",revip);
}

因为getinformation返回的是mac首地址所以就只能输出第一个,你循环以下把所有的mac里的内容拼接起来或者直接都打印出来就可以了

要用你函数里面用的方式打印出来:
for(i=0;i<4;i++)
{
printf("ip[%d]:%s\n",i,ip+i);
}
这种方式是打印字符串 printf("revip:%s\n",revip);
你第一个就是0,认为字符串结束了,所以打不出来