今天被問說怎會沒用過!!! 我覺得好羞愧,趕快來做筆記跟記錄一下
以後就會了..... = =
C語言提供一個可以在命令列中將參數引入的功能。也就是說,我們可以在MS-DOS模式下,在執行檔名稱的後面,可以填入需要的參數。
常見的為主程式 main() 有兩個引數 argc 與 argv [1],即函數 main 標題的定義為
main( int argc, char *argv[] )
其作用是 執行該檔 及 所相隨的 option。
如果將一程式 file.c 編譯完之後, 產生一 執行檔 file.exe。 當執行 file.exe 如
c:> file option1 option2 option3
則執行 file.exe 時, argc 的值為 4, argv 則 含 4 個字串,即
argv[0]="file"、 argv[1]="option1"、 argv[2]="option2"、 argv[3]="option3"。
如此一來 程式的設計, 可以有 較多的彈性。
【說明】[4]:
1、argc 與 argv為C語言的關鍵字,是專門用在命令列的參數名。
2、argc是argument count(參數總和)的縮寫,代表包括指令本身的參數個數。系統會自動計算所輸入的參數個數。
3、argv則是argument value的縮寫。代表參數值。也就是使用者在命令列中輸入的字串,每個字串以空白相隔。同時,系統會自動將程式本身的名稱指定給argv[0],再將程式名稱後面所接續的參數依序指定給argv[1]、argv[2]….。
試試看這個例子[3]:
#include ;
int main(int argc, char *argv[])
{
printf("%d\n",argc);
while(argc)
printf("%s\n",argv[--argc]);
return 0;
}
假設將其編譯為test.exe,
在命令行下,
test hello
得到的輸出結果為:
2
hello
test
/*
main(int argc, char *argv[]),其中argc是指變量的個數,
本例中指test和hello,即為2,argc至少為1
argv是一個char *的數組,其中存放變量的內容,此處 argv[0]中存放test,argv[1]存放hello
*/
再來個例子,題目為把檔案file1 copy到檔案file2去
檔名為copyFile.c [1][2]
#include
void main(int argc, char *argv[])
{
char c;
int toScreen = 1;
FILE *fpin, *fpout;
if(argc < 2 || argc > 3)
{
printf("The correct format is: copyFile file1 file2\n");
exit(1);
}
fpin = fopen(argv[1], "r");
if( !fpin )
{
printf("The file: %s is not found!\n", argv[1]);
return;
}
if(argc == 3)
{
fpout = fopen(argv[2], "w");
if( !fpout )
{
printf("The file: %s is not found, or no available space!\n", argv[2]);
return;
}
toScreen = 0;
}
while( (c=getc(fpin)) != EOF)
{
if( toScreen )
putchar(c);
else
putc(c, fpout);
}
fclose(fpin);
if( !toScreen)
fclose(fpout);
}
References:
[1]http://nknucc.nknu.edu.tw/~jwu/c/cpgch10.htm#third
[2]http://tw.myblog.yahoo.com/zentai-chang/article?mid=791&prev=797&next=-1
[3]http://www.lslnet.com/linux/f/docs1/i04/big5124525.htm
[4]http://www.eyny.com/thread-1158039-1-1.html
沒有留言:
張貼留言