(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輸出情況

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章