#include <ctype.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(int argc,char **argv)
{
FILE *fp;
char buf[512];
char *p1,*p2,*p3;
char ipaddr[16]; //初学者一定要注意这个数组范围,小心后面溢出
char netmask[16]; //同上
fp=popen("ifconfig eth1","r"); //调用子程序执行 ifconfig eth1(LINUX环境下)
if(fp == NULL)
{
printf("popen failure:%s\n",strerror(errno)); //如果调用失败,打印失败原因
return 0;
}
while(fgets(buf,sizeof(buf),fp)!=NULL)//指针应该判断是NULL,不是0
{
if( (p1=strstr(buf,"inet addr:")) != NULL )
{
p2=strchr(p1,':');
p3=strchr(p2,' ');
memset(ipaddr,0,sizeof(ipaddr));/*设置数组元素为\0,而不是0,因为是sizeof定义的是字符,改为10,大家可试试与预想值相同吗,换成strlen再试试*/
strncpy(ipaddr,p2+1,p3-p2);//同一类型两个指针相减等于相差元素个数,不同则无意义
printf("p3-p2-1=%d\n",p3-p2-1);
printf("p3-p2=%d\n",p3-p2);
#if 1
printf("IP address:%s\n",ipaddr);//注意我们上面定义的数组长度,如果改为大于16会成功吗?
printf("p2的值是:%s",p2);
printf("p3的值是:%s",p3);
#endif
p2=strrchr(p1,':');
p3=strrchr(p2,'\n');
memset(netmask,0,sizeof(netmask));
strncpy(netmask,p2+1,p3-p2);
printf("Netmask address:%s\n",netmask);
}
}
pclose(fp);
return 0}
char ipaddr[16]的输出情况:
char ipaddr[n] n>16输出情况