Linux中 C++ main函数参数argc和argv含义及用法
Linux中 C++ main函數(shù)參數(shù)argc和argv含義及用法
簡(jiǎn)介
argc 是 argument count的縮寫(xiě),表示傳入main函數(shù)的參數(shù)個(gè)數(shù);
argv 是 argument vector的縮寫(xiě),表示傳入main函數(shù)的參數(shù)序列或指針,并且第一個(gè)參數(shù)argv[0]一定是程序的名稱(chēng),并且包含了程序所在的完整路徑,所以確切的說(shuō)需要我們輸入的main函數(shù)的參數(shù)個(gè)數(shù)應(yīng)該是argc-1個(gè);
實(shí)驗(yàn)
直接運(yùn)行
#include <iostream>using namespace std;int main(int argc, char** argv){for (int i=0; i<argc; ++i){cout << "argument[" << i << "] is : " << argv[i] << endl;}return 0; }注意:argv是指向指針的指針,main函數(shù)的第二個(gè)參數(shù)char \*argv[]也可以替換為 char **argv,兩者是等價(jià)的。
下面我們?cè)贚inux命令行編譯運(yùn)行該程序:
g++ -c test.cpp -o test.o g++ test.o -o test ./test輸出:
argument[0] is : ./test可以看到,直接運(yùn)行的話輸出的argv只有一個(gè)參數(shù),即本文件的路徑。
傳入?yún)?shù)
既然有argc作為argv的計(jì)數(shù),那么設(shè)計(jì)時(shí)的考量就肯定不可能是只有一個(gè)參數(shù)。那么怎樣想main函數(shù)傳入?yún)?shù)呢?
在Windows下,可以通過(guò)在集成開(kāi)發(fā)環(huán)境IDE(如VS2019)中設(shè)置命令參數(shù)。
而在Linux下,我們則可以直接通過(guò)在命令行運(yùn)行文件時(shí)傳入命令參數(shù)。
同樣時(shí)上面的程序,如果我們這樣運(yùn)行:
./test hello world !注意中間用空格分隔,則會(huì)得到輸出:
argument[0] is : ./test argument[1] is : hello argument[2] is : world argument[3] is : !可以看到,三個(gè)字符串hello,world,!分別作為argv的第1,2,3個(gè)參數(shù)傳入了main函數(shù)。
這樣我們就可以很方便地在程序運(yùn)行時(shí),通過(guò)命令行向程序傳遞參數(shù)。這是十分有用的,比如用opencv打開(kāi)指定的圖片,存儲(chǔ)指定的文件等,只要是在寫(xiě)源代碼時(shí)不確定,需要根據(jù)運(yùn)行時(shí)的具體輸入作為參數(shù)的程序,均可使用argv參數(shù)。
例程
例1
例如,我們寫(xiě)一個(gè)函數(shù),將最后一個(gè)argv參數(shù)作為文件名,將前面的參數(shù)作為文本內(nèi)容,寫(xiě)到該文件中:
#include <iostream> #include <fstream> #include <string>using namespace std;int main(int argc, char** argv){string fileName = argv[argc-1];ofstream outfile(fileName, ios::trunc);for (int i=1; i<argc-1; ++i){outfile << argv[i] << ' ';}outfile << endl;outfile.close();return 0; }編譯運(yùn)行:
g++ -c writeArgv.cpp -o writeArgv.o g++ writeArgv.o -o writeArgv ./writeArgv Hello main, I am writing argc and argv. writeArgv.txt成功在writeArgv.txt中寫(xiě)入:Hello main, I am writing argc and argv.
例2
用argv命令行傳參的方式傳入opencv要打開(kāi)的圖像文件:
#include <iostream> #include <core/core.hpp> #include <highgui/highgui.hpp> using namespace std; using namespace cv;void main(int argc,char **argv){Mat image=imread(argv[1]);imshow("Lena",image);waitKey(); }注意
可以有argc和argv,但是在函數(shù)體中沒(méi)有用,這一點(diǎn)和其他函數(shù)也是類(lèi)似的。
有時(shí)還有第三個(gè)參數(shù),char** env,為字符串?dāng)?shù)組。env的每一個(gè)元素都包含ENVVAR=value形式的字符串,其中ENVVAR為環(huán)境變量,value為其對(duì)應(yīng)的值。平時(shí)使用到的比較少,一般只用前兩個(gè)參數(shù)argc、argv。
另外要提醒的是,變量名argc和argv與其他常規(guī)C++變量名一樣,只要合理且符合規(guī)范即可,不一定非要叫argc, argv,如:
int main(int count, char** params){// write your code }都是可以的。
Ref:
https://blog.csdn.net/dcrmg/article/details/51987413
https://blog.csdn.net/dgreh/article/details/80985928
總結(jié)
以上是生活随笔為你收集整理的Linux中 C++ main函数参数argc和argv含义及用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苏联制造过哪些奇葩武器?光棱坦克!
- 下一篇: 长安UNI-V搭载的什么发动机?