簡體   English   中英

int main(int argc,char * argv [])

[英]int main(int argc, char *argv[])

如果我有這個:

int main(int argc, char *argv[])

在正文中,您有時可以使用argv[1]找到程序。

我們什么時候在argv[0]使用argv[1] argv[0] 是否僅在我們想要在命令行中讀取第二個參數時?

按照慣例argv[0]當前程序的名稱 (或路徑), argv[1]argv[argc - 1]是用戶提供的命令行參數

然而,這並不一定是真實的-程序可以與操作系統相關的功能來繞過這一要求,而這種情況往往不夠,你應該意識到這一點。 (即使你知道它,我也不確定你能做多少事情......)

例:

gcc -O3 -o temp.o "My file.c"

會(應該)產生以下參數:

argc: 5
argv: ["gcc", "-O3", "-o", "temp.o", "My file.c"]

所以說argv[0]會引用gcc而不是 -O3

argv是一個指針數組,此數組中的每個指針都存儲一個來自命令行的參數。 所以argv[0]是第一個參數(即可執行文件/程序本身), argv[1]是第二個參數,依此類推!

參數總數由argc確定。

假設您的C ++可執行文件是:

/home/user/program (或Windows中的C:\\program.exe

如果你執行:

./home/user/program 1 2 (或Windows中的C:\\program.exe 1 2

argv[0] = /home/user/programC:\\program.exe
argv[1] = 1
argv[2] = 2

那是因為:

  • argv[0]是可執行文件的路徑
  • argv[1]是第一個參數

編輯:

現在我看到argv[0]不一定是可執行文件的路徑。
閱讀以下SO問題: args [0]是否保證是執行路徑?

argv [0]是程序的執行路徑,argv [1]是程序的第一個參數

是的,主要是它, argv[1]是第二個命令行參數。 第一個命令行參數是程序本身的名稱。

或者,為了避免此答案最初具有的語義混亂以及其他人的評論,將argv [0]調用為第0個參數可能是有意義的,因此argv[1]現在將成為用戶提供的“第一個”值。

無論如何,這來自exec()函數系列,例如execl ,它具有以下用途:

 int execl(const char *path, const char *arg0, ... /*, (char *)0 */);

在(Unix)shell中鍵入命令時,如果需要,shell首先解析命令名(使用$PATH )以查找實際的絕對路徑。 path提供(絕對或相對)路徑,並且最初輸入的命令以arg0形式提供,最終在程序中變為argv[0]

其余的命令行參數最終為argv[1]等。

簡短回答是,數組包含傳遞給程序的所有選項。

因為argv [0]是程序本身的文件路徑。 額外的命令行參數在其他索引中,argv [1],argv [2] ..您可以在這里閱讀更多內容: http//www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3 /CommandLineArguments.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM