-
1 # 風雲學會陳經
-
2 # 獨立的網際網路從業者
argv和argc是命令列引數用於在C和C ++中傳遞給main()。argc將是argv指向的字串的數量。這將(實際上)為1加上引數的數量,因為實際上所有的實現都會在程式中加入陣列的名稱。按照約定,這些變數被命名為argc(引數計數)和argv(引數向量),但它們可以被賦予任何有效的識別符號:int main(int num_args,char ** arg_strings)同樣有效。如果你不打算處理命令列引數,它們也可以完全省略,採用int main()。
試一下下面的程式:
執行它,./test,a1,b2,c3.
int main();
This is a simple declaration. It cannot take any command line arguments.
int main(int argv, char* argcs[])
當您的程式必須使用命令列引數時,會使用此宣告。 當像這樣執行時:
myprogram agr1 agr2 arg3
argc或Argument Count將被設定為4(四個引數),argv或Argument Vectors將使用指向“myprogram”,“arg1”,“arg2”和“arg3”的字串指標填充。 程式呼叫(myprogram)包含在引數中!
-
3 # 嵌入式宏思微想
區別是,前者無引數,後者有引數。需要在命令列或其他程式中呼叫,且需要傳參,則用後者,不傳參用前者即可,當然也可以用後者(不寫可執行檔案以外的實參就行)。
後者的說明如下:
(1) 可執行檔名稱(可包括路徑名稱)和所有引數的個數之和傳遞給argc;
(2) 可執行檔名稱(可包括路徑名稱)作為一個字串,首地址被賦給argv[0],引數1也作為一個字串,首地址被賦給argv[1],... ...依次類推。
回覆列表
main函式,是命令列程式的入口。在DOS時代,以及在Unix/Linux等作業系統中,程式都是從main開始執行的。
早年微軟是沒有Windows的,起家的是DOS作業系統。在windows裡的cmd或者說Dos prompt,就相當於以前DOS作業系統的介面。人們在裡面輸入“命令”,啟動一個程式。UNIX又比DOS更早了,就更全是命令列程式了。Linux看著象UNIX,但是比Windows出來的還晚,是將可以跑windows的PC,做成UNIX式的伺服器。後來Unix/Linux都有圖形介面了,象windows那樣執行程式,但是Terminal也象Dos prompt一樣,可以打入命令執行程式。
比如我們在windows裡的Dos prompt裡打入"notepad 1.txt"這個命令列,並且回車執行。notepad就是“記事本”這個程式的名字,它會開啟1.txt這個檔案。在這個命令列裡,notepad是“命令”,“1.txt”是它的第一個引數。
當然notepad這個程式是系統自己帶的。我們也可以自己用C語言來寫程式。有的程式,是不需要引數的,例如下面這個程式:
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
我們把這個程式叫hw,用VC這樣的編譯器編譯它(win32 console程式),在Dos prompt裡執行它,它就會輸出hello world!給我們看。
可以看出,無論我們在hw後面放不放參數,執行結果都是一樣的。
這時我們可以改下這個程式變成int main(int argc,char* argv[])的樣式,讓它可以接受命令列引數。引數不同,執行結果不同。
我們來編譯執行下看看。
可以看函式程式碼理解這個執行結果。"hw 2 what"這個命令, 它的argc值是3,說明有2個引數,以及命令本身也算一個。argv[0]是一個字串,就是"hw"這個命令本身。argv[1]也是一個字串,雖然只有一個字元。argv[2]是第二個字串。main函式認為,所有引數都是字串。這個程式,會將所有的argv依次輸出。
如果我們要將引數理解成整數,可以用atoi函式,將字串轉化成整數來理解。如atoi("10")就會得到10這個值。所以”hw 10 what"這個命令,會將“hellow world!”列印10遍。
透過這個例子, 我們知道,int main(int argc,char* argv[])就是讓命令列輸入引數的辦法。引數都先理解成字串,即使樣子看上去象是單位或者多位的整數。