C語言 命令列參數[轉]
在支援C語言的環境中,可以在程式開始執行時將命令列參數傳遞給程式。
調用主函數main時,有兩個參數,第一個參數表示運行程式時命令列中參數的數目;第二個參數表示指向字串數組的指標,其中每個字串對應一個參數。
main(int argc, char *argv[])
argc和argv是習慣性用法,可以更改。
argv是一個指向指標的指標,
這個數組的每個元素都是一個字元指標,指向的第一個參數就是程式的名稱,最後一個是NULL。
#include <stdio.h>
int main(int argc,char
*argv[])
{
int i;
for(i
= 1; i< argc; i++)
printf("%s%s",argv[i], (i< argc
- 1)?
"" :
"");
printf("/n");
system("PAUSE");
return
0;
}
將程式編譯後產生可執行檔,這裡命名為ee.exe,路經為D:\。
注意,此代碼在編譯環境中運行是沒有效果的,必須在DOS下運行。
進入DOS環境,進入D:\,輸入
ee Hello world 將會列印出 Hello world 按照C語言的約定,argv[0]的值是啟動該程式的程式名,因此argc的值至少為1。如果argc的值為1,則說明程式名後面沒有命令列參數。在上面的例子中,argc的值為3,argv[0]、argv[1]和argv[2]的值分別為“ee”、“Hello”和“world”。 UNIX系統中,C語言程式有個公用的約定,以負號開頭的參數表示一個可選的標誌或參數。模式尋找程式:#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getline(char line[],int max);
main(int argc,char
*argv[])
{
char line[MAXLINE];
long lineno=
0;
int c,except=
0,number=
0,found=
0;
while(--argc>0&&
(*++argv)[0]==
'-')
while(c
= *(++argv[0]))
switch(c)
{
case'x':
except =
1;
break;
case'n':
number =
1;
break;
default:
printf("find:illegal option %c\n",c);
argc =
0;
found =
-1;
break;
}
if (argc
!= 1)
printf("Usage:find -x -n pattern\n");
else
while (getline (line ,MAXLINE)>
0)
{
lineno++;
if ((strstr(line ,*argv)!= NULL)
!= except)
{
if (number)
printf("%ld:",lineno);
printf("%s\n",line);
found ++;
}
}
return found;
}
int getline(char s[] ,int lim)
{
int c,i;
for (i
= 0;i< lim-1&&
(c = getchar())!='\n';
i++ )
s[i] = c;
s[i] =
'\0';
return i;
}