主要是返回第九行定义的ip和mac,现在程序存在问题,返回的数值只有单个字符而不是字符串。
如果使用第十行和十一行的定义,则函数里面输出的数值全部是错的。
正确输出应该是
remac:
请大家帮忙!感谢!
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,认为字符串结束了,所以打不出来