3 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
的簽名main是:
int main(int argc, char **argv);
argc指傳入的命令行參數(shù)的數(shù)量,其中包括用戶調(diào)用的程序的實(shí)際名稱。 argv包含從索引1開始的實(shí)際參數(shù)。索引0是程序名稱。
因此,如果您像這樣運(yùn)行程序:
./program hello world
然后:
argc為3。
argv [0]將為“ ./program”。
argv [1]將為“ hello”。
argv [2]將是“世界”。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
想象一下
*main() is also a function which is called by something else (like another FunctioN)
*the arguments to it is decided by the FunctioN
*the second argument is an array of strings
*the first argument is a number representing the number of strings
*do something with the strings
也許一個(gè)示例程序會有所幫助。
int main(int argc,char *argv[])
{
printf("you entered in reverse order:\n");
while(argc--)
{
printf("%s\n",argv[argc]);
}
return 0;
}
它只是以相反的順序?qū)⒛斎氲乃袃?nèi)容打印為args,但是您應(yīng)該制作新的程序來做更多有用的事情。
編譯它(如打個(gè)招呼),從終端運(yùn)行它的參數(shù)如下
./hello am i here
然后嘗試對其進(jìn)行修改,以使其嘗試檢查兩個(gè)字符串是否彼此相反,那么您將需要檢查argc參數(shù)是否恰好為三個(gè),如果還有其他內(nèi)容會打印錯(cuò)誤
if(argc!=3)/*3 because even the executables name string is on argc*/
{
printf("unexpected number of arguments\n");
return -1;
}
然后檢查argv [2]是否與argv [1]相反,并打印結(jié)果
./hello asdf fdsa
應(yīng)該輸出
they are exact reverses of each other
最好的例子是文件復(fù)制程序,就像cp
cp file1 file2
cp是第一個(gè)參數(shù)(argv [0]而不是argv [1]),大多數(shù)情況下,除非需要引用或其他內(nèi)容,否則應(yīng)忽略第一個(gè)參數(shù)
如果您制作了cp程序,則您確實(shí)了解了主要參數(shù)...

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
Siamore,我一直看到每個(gè)人都使用命令行來編譯程序。我通過代碼:: blocks從ide使用x11終端,這是我的Linux機(jī)器上的gnu gcc編譯器。我從未從命令行編譯過程序。因此,Siamore,如果我希望程序名稱為cp,是否要初始化argv [0] =“ cp”; Cp是字符串文字。而且所有要輸出到stdout的東西都在命令行上?你給我的例子Siamore我理解了!即使您輸入的字符串只有幾個(gè)單詞,但仍然只是一個(gè)arg。因?yàn)樗挥秒p引號引起來。所以arg [0](編名)實(shí)際上是帶換行符的字符串文字?所以我明白為什么您使用if(argc!= 3)打印錯(cuò)誤。因?yàn)榫幟? argv [0],此后還有2個(gè)args,并且現(xiàn)在發(fā)生了錯(cuò)誤。我還會使用什么其他原因?我真的認(rèn)為我對如何從命令行或終端進(jìn)行編譯缺乏了解是我對此領(lǐng)域缺乏了解的原因??!Siamore,您幫助我更好地了解了cla!仍然沒有完全理解,但我并未忘記這個(gè)概念。我將學(xué)習(xí)從終端進(jìn)行編譯,然后重新閱讀您編寫的內(nèi)容。我敢打賭,那我會完全理解的!在您的幫助下,大聲笑
<>我不是寫自己的代碼,而是我寫的代碼。
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("The following arguments were passed to main(): ");
for(i=1; i<argc; i++) printf("%s ", argv[i]);
printf("\n");
return 0;
}
這是輸出:
anthony@anthony:~\Documents/C_Programming/CLA$ ./CLA hey man
The follow arguments were passed to main(): hey man
anthony@anthony:~\Documents/C_Programming/CLA$ ./CLA hi how are you doing?
The follow arguments were passed to main(): hi how are you doing?
因此argv是字符串文字的表,而argc是它們的數(shù)量?,F(xiàn)在argv [0]是程序的名稱。因此,如果我鍵入./CLA來運(yùn)行程序,則./CLA為argv [0]。上面的程序?qū)⒚钚性O(shè)置為接受無限數(shù)量的參數(shù)。如果需要,我可以將它們設(shè)置為僅取3或4。就像顯示的一個(gè)或您的示例一樣,Siamore ... if(argc!= 3)printf(“此處出現(xiàn)一些錯(cuò)誤”); 謝謝Siamore,沒有您就做不到!多虧了帖子的其余部分的時(shí)間和精力!
PS,以防將來出現(xiàn)這樣的問題……您永遠(yuǎn)不會知道問題是因?yàn)槲沂褂玫氖荌DE AKA Code :: Blocks。如果要在上面運(yùn)行該程序,它將打印該程序的路徑/目錄。例如:?/ Documents / C / CLA.c,它必須從終端運(yùn)行并使用命令行進(jìn)行編譯。gcc -o CLA main.c,并且您必須位于文件目錄中。
- 3 回答
- 0 關(guān)注
- 604 瀏覽
添加回答
舉報(bào)