亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C中main的參數

C中main的參數

C
繁星coding 2019-10-25 15:07:24
我不知道該怎么辦!我對C基礎有很好的理解。結構,文件IO,字符串等。CLA之外的所有內容。由于某種原因,我無法理解這個概念。任何建議,幫助或建議。PS我是Linux用戶
查看完整描述

3 回答

?
MMTTMM

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]將是“世界”。


查看完整回答
反對 回復 2019-10-25
?
暮色呼如

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程序,則您確實了解了主要參數...


查看完整回答
反對 回復 2019-10-25
?
天涯盡頭無女友

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,并且您必須位于文件目錄中。


查看完整回答
反對 回復 2019-10-25
  • 3 回答
  • 0 關注
  • 611 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號