Linux中 C++ main函数参数argc和argv含义及用法
Linux中 C++ main函數參數argc和argv含義及用法
簡介
argc 是 argument count的縮寫,表示傳入main函數的參數個數;
argv 是 argument vector的縮寫,表示傳入main函數的參數序列或指針,并且第一個參數argv[0]一定是程序的名稱,并且包含了程序所在的完整路徑,所以確切的說需要我們輸入的main函數的參數個數應該是argc-1個;
實驗
直接運行
#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函數的第二個參數char \*argv[]也可以替換為 char **argv,兩者是等價的。
下面我們在Linux命令行編譯運行該程序:
g++ -c test.cpp -o test.o g++ test.o -o test ./test輸出:
argument[0] is : ./test可以看到,直接運行的話輸出的argv只有一個參數,即本文件的路徑。
傳入參數
既然有argc作為argv的計數,那么設計時的考量就肯定不可能是只有一個參數。那么怎樣想main函數傳入參數呢?
在Windows下,可以通過在集成開發環境IDE(如VS2019)中設置命令參數。
而在Linux下,我們則可以直接通過在命令行運行文件時傳入命令參數。
同樣時上面的程序,如果我們這樣運行:
./test hello world !注意中間用空格分隔,則會得到輸出:
argument[0] is : ./test argument[1] is : hello argument[2] is : world argument[3] is : !可以看到,三個字符串hello,world,!分別作為argv的第1,2,3個參數傳入了main函數。
這樣我們就可以很方便地在程序運行時,通過命令行向程序傳遞參數。這是十分有用的,比如用opencv打開指定的圖片,存儲指定的文件等,只要是在寫源代碼時不確定,需要根據運行時的具體輸入作為參數的程序,均可使用argv參數。
例程
例1
例如,我們寫一個函數,將最后一個argv參數作為文件名,將前面的參數作為文本內容,寫到該文件中:
#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; }編譯運行:
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中寫入:Hello main, I am writing argc and argv.
例2
用argv命令行傳參的方式傳入opencv要打開的圖像文件:
#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,但是在函數體中沒有用,這一點和其他函數也是類似的。
有時還有第三個參數,char** env,為字符串數組。env的每一個元素都包含ENVVAR=value形式的字符串,其中ENVVAR為環境變量,value為其對應的值。平時使用到的比較少,一般只用前兩個參數argc、argv。
另外要提醒的是,變量名argc和argv與其他常規C++變量名一樣,只要合理且符合規范即可,不一定非要叫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
總結
以上是生活随笔為你收集整理的Linux中 C++ main函数参数argc和argv含义及用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苏联制造过哪些奇葩武器?光棱坦克!
- 下一篇: linux 其他常用命令