(Linux之初学篇)用指针从文段读出我们想要内容

#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输出情况

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值