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 : !

可以看到,三個字符串helloworld!分別作為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();
}

注意

  1. 可以有argcargv,但是在函數體中沒有用,這一點和其他函數也是類似的。

  2. 有時還有第三個參數,char** env,為字符串數組。env的每一個元素都包含ENVVAR=value形式的字符串,其中ENVVAR為環境變量,value為其對應的值。平時使用到的比較少,一般只用前兩個參數argcargv

  3. 另外要提醒的是,變量名argcargv與其他常規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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言六位搶答器課程設計,51單片機八路搶答器課程設計

;說明&#xff1a;本人的這個設計改進后解決了前一個版本中1號搶答優先的問題&#xff0c;并增加了錦囊的設置&#xff0c;當參賽選手在回答問題時要求使用錦囊&#xff0c;則主持人按下搶答開始鍵&#xff0c;計時重新開始。;八路搶答器電路請看下圖是用ps仿真的&#xff0c;已…

ELF文件詳解—初步認識

ELF文件詳解—初步認識 轉自&#xff1a;https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在講解ELF文件格式之前&#xff0c;我們來回顧一下&#xff0c;一個用C語言編寫的高級語言程序是從編寫到打包、再到編譯執行的基本過程&#xff0c;我們知道在C…

埃及分數問題c語言,埃及分數問題(轉)

今日&#xff0c;小雨和小明來到網絡中心&#xff0c;繼續與劉老師討論“數的認識”問題。劉老師說&#xff1a;“還有一種‘埃及分數’需要認識。這是一類分裂分數的思維題&#xff0c;對思維能力的訓練很有價值。”小明說&#xff1a;“有意思&#xff0c;愿洗耳恭聽。”劉老…

linux常用命令--開發調試篇

前言 Linux常用命令中有一些命令可以在開發或調試過程中起到很好的幫助作用&#xff0c;有些可以幫助了解或優化我們的程序&#xff0c;有些可以幫我們定位疑難問題。本文將簡單介紹一下這些命令。 轉自&#xff1a;https://www.yanbinghu.com/2018/09/26/61877.html 示例程序…

簡單有趣的c語言小程序,一個有趣的小程序

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓源碼:#include #include #include #include #include HINSTANCE g_hInstance 0;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nSh…

linux下ora 01110,ORA-01003ORA-01110

Oracle 9i數據庫登錄時&#xff0c;提示ORA-01003&ORA-01110&#xff0c;大概意思是數據文件存儲介質損壞。startup nomount,正常&#xff1b;alter database mount,也正常&#xff1b;alter database open,提示如下&#xff1a;alter database open*ERROR 位于第 1 行:ORA…

x11轉發:通過ssh遠程使用GUI程序

x11轉發&#xff1a;通過ssh遠程使用GUI程序 我們常常使用ssh服務遠程操控服務器&#xff0c;大多數操作我們都可以通過命令行命令來實現。 ssh遠程無法查看GUI程序 現在&#xff0c;筆者在x11-test目錄下放入一張圖片test.jpg&#xff0c;并通過opnencv-python寫一個簡單的…

操作系統引導詳細過程

操作系統引導詳細過程 轉自&#xff1a;https://blog.csdn.net/lijie45655/article/details/89366372 就直觀而言&#xff0c;我們所見到計算機啟動的過程是&#xff1a;按下電腦開機鍵&#xff0c;系統在黑色的屏幕下打印出一些英文語句、然后進入進度條狀態&#xff0c;最后…

android 自定義透明 等待 dialog,Android自定義Dialog內部透明、外部遮罩效果

Android自定義Dialog內部透明、外部遮罩效果發布時間&#xff1a;2020-09-09 03:01:41來源&#xff1a;腳本之家閱讀&#xff1a;117作者&#xff1a;zst1303939801本文實例為大家分享了Android自定義Dialog遮罩效果的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下圖…

對比損失的PyTorch實現詳解

對比損失的PyTorch實現詳解 本文以SiT代碼中對比損失的實現為例作介紹。 論文&#xff1a;https://arxiv.org/abs/2104.03602 代碼&#xff1a;https://github.com/Sara-Ahmed/SiT 對比損失簡介 作為一種經典的自監督損失&#xff0c;對比損失就是對一張原圖像做不同的圖像…

android 融云瀏覽大圖,融云 Android sdk kit 頭像昵稱更新機制

先申明筆者的實現方式不是唯一 也不一定是最優化的方案 如果您看到此篇博文 有不同看法 或者 更好的優化 更高的效率 歡迎在評論發表意見 融云官網點我融云頭像機制相關視頻詳解首先跟大家說一下 kit 跟 lib 的頭像機制 kit 是已經包含融云已經給開發者定制好的界面 諸如 會話界…

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. 報錯信息 報錯信息&#xff1a; RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates tha…

android訪問重定向地址,如何從android中重定向url加載圖像(示例代碼)

嗨&#xff0c;我正面臨這個問題我從RESTCall獲取了一個URL網址是http://hck.re/kWWxUI但是當我在瀏覽器中檢查時&#xff0c;它會重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何將此圖像加載到我的imageView中我已經知道如何將畢加索…

Linux中的awk、sed、grep及正則表達式詳解

Linux中的awk、sed、grep及正則表達式詳解 簡介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk適用于取列&#xff0c;sed適用于取行&#xff0c;grep適用于過濾。 正則表達式 首先我們來介紹一下正則表達式&#xff0c;正則表達式(regular expression)描述了一種…

android聚焦時如何給控件加邊框,edittext設置獲得焦點時的邊框顏色

第一步&#xff1a;為了更好的比較&#xff0c;準備兩個一模一樣的EditText(當Activity啟動時&#xff0c;焦點會在第一個EditText上&#xff0c;如果你不希望這樣只需要寫一個高度和寬帶為0的EditText即可避免&#xff0c;這里就不這么做了)&#xff0c;代碼如下&#xff1a;a…

gcc參數 -i, -L, -l, -include

gcc參數 -i, -L, -l, -include -i&#xff0c;-L&#xff0c;-l&#xff0c;-include -l和-L -l參數就是用來指定程序要鏈接的庫&#xff0c;-l參數緊接著就是庫名&#xff0c;那么庫名跟真正的庫文件名有什么關系呢&#xff1f;就拿數學庫來說&#xff0c;他的庫名是m&…

xargs 命令教程

xargs 命令教程 轉自&#xff1a;http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2019年8月 8日 xargs是 Unix 系統的一個很有用的命令&#xff0c;但是常常被忽視&#xff0c;很多人不了解它的用法。 本文介紹如…

android strictmode有什么作用,Android 性能優化 之 StrictMode

8種機械鍵盤軸體對比本人程序員&#xff0c;要買一個寫代碼的鍵盤&#xff0c;請問紅軸和茶軸怎么選&#xff1f;StrictMode概述StrictMode 是用來檢測程序中違例情況的開發者工具。使用StrictMode&#xff0c;系統檢測出主線程違例的情況會做出相應的反應&#xff0c;如日志打…

curl 的用法指南

curl 的用法指南 轉自&#xff1a;http://www.ruanyifeng.com/blog/2019/09/curl-reference.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2019年9月 5日 簡介 curl 是常用的命令行工具&#xff0c;用來請求 Web 服務器。它的名字就是客戶端&#xff08;client&#xf…

怎么在html顯示已登錄狀態,jQuery Ajax 實現在html頁面實時顯示用戶登錄狀態

當網站是全靜態的html頁面時&#xff0c;而又希望網站會員在登錄之后并在所有頁面頭部顯示登錄狀態&#xff0c;如用戶名等&#xff0c;如果未登錄就是未登錄狀態&#xff0c;下面給大家來分享實現的方法。一、在html靜態頁面中加入div&#xff0c;并指定ID如&#xff1a;二、新…