3 回答

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

TA貢獻1853條經驗 獲得超9個贊
想象一下
*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
也許一個示例程序會有所幫助。
int main(int argc,char *argv[])
{
printf("you entered in reverse order:\n");
while(argc--)
{
printf("%s\n",argv[argc]);
}
return 0;
}
它只是以相反的順序將您輸入的所有內容打印為args,但是您應該制作新的程序來做更多有用的事情。
編譯它(如打個招呼),從終端運行它的參數如下
./hello am i here
然后嘗試對其進行修改,以使其嘗試檢查兩個字符串是否彼此相反,那么您將需要檢查argc參數是否恰好為三個,如果還有其他內容會打印錯誤
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]相反,并打印結果
./hello asdf fdsa
應該輸出
they are exact reverses of each other
最好的例子是文件復制程序,就像cp
cp file1 file2
cp是第一個參數(argv [0]而不是argv [1]),大多數情況下,除非需要引用或其他內容,否則應忽略第一個參數
如果您制作了cp程序,則您確實了解了主要參數...

TA貢獻1831條經驗 獲得超9個贊
Siamore,我一直看到每個人都使用命令行來編譯程序。我通過代碼:: blocks從ide使用x11終端,這是我的Linux機器上的gnu gcc編譯器。我從未從命令行編譯過程序。因此,Siamore,如果我希望程序名稱為cp,是否要初始化argv [0] =“ cp”; Cp是字符串文字。而且所有要輸出到stdout的東西都在命令行上?你給我的例子Siamore我理解了!即使您輸入的字符串只有幾個單詞,但仍然只是一個arg。因為它被用雙引號引起來。所以arg [0](編名)實際上是帶換行符的字符串文字?所以我明白為什么您使用if(argc!= 3)打印錯誤。因為編名= argv [0],此后還有2個args,并且現在發生了錯誤。我還會使用什么其他原因?我真的認為我對如何從命令行或終端進行編譯缺乏了解是我對此領域缺乏了解的原因?。iamore,您幫助我更好地了解了cla!仍然沒有完全理解,但我并未忘記這個概念。我將學習從終端進行編譯,然后重新閱讀您編寫的內容。我敢打賭,那我會完全理解的!在您的幫助下,大聲笑
<>我不是寫自己的代碼,而是我寫的代碼。
#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是它們的數量?,F在argv [0]是程序的名稱。因此,如果我鍵入./CLA來運行程序,則./CLA為argv [0]。上面的程序將命令行設置為接受無限數量的參數。如果需要,我可以將它們設置為僅取3或4。就像顯示的一個或您的示例一樣,Siamore ... if(argc!= 3)printf(“此處出現一些錯誤”); 謝謝Siamore,沒有您就做不到!多虧了帖子的其余部分的時間和精力!
PS,以防將來出現這樣的問題……您永遠不會知道問題是因為我使用的是IDE AKA Code :: Blocks。如果要在上面運行該程序,它將打印該程序的路徑/目錄。例如:?/ Documents / C / CLA.c,它必須從終端運行并使用命令行進行編譯。gcc -o CLA main.c,并且您必須位于文件目錄中。
- 3 回答
- 0 關注
- 611 瀏覽
添加回答
舉報