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