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.mzph.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;二、新…