![](/img/trans.png)
[英]Significance of argc and argv in int main( int argc, char** argv ) in OpenCV
[英]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/program
( C:\\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.