main函数的参数argc和argv
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/20413773
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.
一.main()函数参数
通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C99中main()函数主要形式为:
(1).int main(void)
(2).int main(int argc,char *argv[]) = int main(int argc,char **argv).
其参数argc和argv用于运行时,把命令行参数传入主程序.其中ARG是指arguments,即参数.具体含义如下:
(参照Arguments to main和C++ Primer7.2.6节)
(1).int argc:英文名为arguments count(参数计数)
count of cmd line args,运行程序传送给main函数的命令行参数总个数,包括可执行程序名,其中当argc=1时表示只有一个程序名称,此时存储在argv[0]中.
(2).char **argv:英文名为arguments value/vector(参数值)
pointer to table of cmd line args,字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,其长度为argc.数组下标从0开始,argv[argc]=NULL.
argv[0] 指向程序运行时的全路径名
argv[1] 指向程序在DOS命令中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
argv[argc] 为NULL.
二.源代码中的argc与argv
由于C程序必须有main()函数为入口,而且它不能被其他函数调用(可以调用自身),因此不能再程序内部取得实际值.那么在何处把实参赋值给main函数的形参呢?这就需要调用"运行"或"DOS提示符",在调用可执行程序exe时,编译器会帮助我们将输入参数的信息放入main函数的参数列表中传参.
1.计算命令行参数个数程序如下:
<strong>//C 输出参数个数 #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { printf("参数个数=%d\n",argc); system("PAUSE"); return 0; } //C++ 输出参数个数 #include <iostream> using namespace std; int main(int argc,char *argv[]) { cout<<"参数个数="<<argc<<endl; system("PAUSE"); return 0; }</strong>
调用"运行"(快捷键Ctrl+R)或"cmd"输入"G:\test.exe"会输出"参数个数=1",此时存储的就是执行程序名.输入"G:\test.exe 2 hello good"输出"参数个数=4":
2.查看argv[]二维数组存储具体字符串的代码如下:
<strong>//C 查看argv存储参数值及对应序号 #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { int i; printf("参数个数=%d\n",argc); for(i=0; i<argc; i++) { printf("参数序号=%d ",i); printf("参数值=%s\n",argv[i]); } system("PAUSE"); return 0; } //C++ 查看argv存储参数值及对应序号 #include <iostream> using namespace std; int main(int argc,char *argv[]) { cout<<"参数个数="<<argc<<endl; for(int i=0; i<argc; i++) { cout<<"参数序号="<<i<<" "; cout<<"参数值="<<argv[i]<<endl; } system("PAUSE"); return 0; }</strong>
"运行"中输入"G:\test.exe 2 hello good",则输出入下图所示:
其中argv[0]指向字符串可执行程序的名称G盘下的test.exe,通常会位于"项目名称\Debut\xxx.exe"中.后面argv[1..3]单元依次指向程序调用时的参数.
三.调用argc和argv
在"运行"中输入"notepad.exe"回车能执行记事本程序(位于C:\Windows\System32),如果输入"notepad.exe test.txt"可以打开test.txt文本文件,其中test.txt位于当前路径下.如下图所示:
为什么我要讲述这个例子呢?主要是说明参数与exe之间的关系,main()函数其实与之也类似.同时在使用文件知识时,我们通常会涉及到main函数的argc和argv参数.如在《C++ Primer》这本书中第10.3.9实现单词转换的例子就涉及到该运用,这里只讲述涉及到该参数的部分代码供大家参考,大家可以自己去学习了解:
#include <iostream> using namespace std; int main(int argc,char *argv[]) { //参数个数=3:工程名\读取txt文件\写入txt文件 if(argc!=3) throw runtime_error("wrong number of arguments"); //打开转换文件,argv[1]为读取的要转换txt文件名 open_file自定义打开函数 if(!open_file(map_file,argv[1])) throw runtime_error("no transformation file"); //打开要转换的写入txt文件 if(!open_file(input,argv[2])) throw runtime_error("no input file"); return 0; }
其中具体操作是通过map(键-值对的集合)对象来实现,推荐大家看看这本最经典的C++书籍.
最后希望该文章对大家有所帮助,请不要小看这简单的基础知识,如果有错误或不足之处,还请海涵.
(By:Eastmount 2014-3-5 夜2点 原创:http://blog.csdn.net/eastmount)
main函数的参数argc和argv的更多相关文章
- (转)C++ main函数中参数argc和argv含义及用法
原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...
- C++ main函数中参数argc和argv含义及用法
argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...
- c语言main函数的参数argc,argv说明
main函数参数argc,argv说明 C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...
- C/C++基础:main函数的参数argc和argv
转载: https://blog.csdn.net/Eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或in ...
- C语言中main函数的参数argc和argv
参考资料: http://wiki.opencv.org.cn/index.php/Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv% ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...
- Main函数参数argc,argv说明
C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv[]) ...
- 关于main函数的参数,argc,argv的内部机制
偶尔对main函数的参数感兴趣,写了个程序验证. int main(int argc,char **argv) 首先,解释两点: 第一 .系统将参数列表,即我们在shell下输入的命令,存储到一个一维 ...
- main函数的参数(int argc,char *argv[])
一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...
随机推荐
- Wireshark、Netcat
Wireshark Wireshark是一个网络数据包分析软件,功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据.为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发 ...
- django 不能访问静态资源的解决办法
最近在中文win10下使用python的django搭建web测试服务器,发现一个诡异的现象,正常配置好django的模型,视图和模板, 1.setting.py内容如下: ""& ...
- 记一次重装系统(.net开发环境重装问题汇总)
起因: 有一天,我突然感觉到电脑的运行明显变慢,慢的可怕,启动任务资源管理器一看,不看不知道,一看吓一跳,CPU使用率,物理内存皆100%,当时的第一印象,是电脑中病毒了吧!!,进入进程一看,有几个名 ...
- linux学习笔记-1.man_page
1.内部命令:echo 查看内部命令帮助:help echo 或者 man echo 2.外部命令:ls 查看外部命令帮助:ls --help 或者 man ls 或者 info ls 3.man文档 ...
- Eclipse中从svn中检出maven项目
相信很多初学者都遇到过Eclipse中从SVN检出Maven项目之后看到的目录结构并不是Maven目录结构:或者只能先用SVN将Maven项目签入到本地,然后再用Eclipse导入Maven项目,但是 ...
- BZOJ.1028.[JSOI2007]麻将(贪心)
题目链接 枚举对子,枚举每张牌,先出完它的刻子,剩下的出顺子.\(O(n^3)\). 不是这样 -> 出完所有刻子,最后出顺子.(日常zz) 优先仨相同的,然后顺子,有一次且一定要用一次机会补顺 ...
- BZOJ2976 : [Poi2002]出圈游戏
首先模拟一遍得到n个同余方程,然后用扩展欧几里得求出最小的可行解即可,时间复杂度$O(n^2)$. #include<cstdio> #define N 30 int n,i,j,k,x, ...
- 异步接收MSMQ消息
在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发.MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信. 在一个典型的场景中,我们要向维护一个队列的 ...
- 利用dynamic简化数据库的访问
今天写了一个数据库的帮助类,代码如下. public static class DbEx { public static dynamic ReadToObject(this IDataReader r ...
- Technical Information ARM-related JTAG / SWD / SWV / ETM Target Interfaces
https://www.computex.co.jp/eg/products/pdf/technical_pdf/arm_if01_gijutsu_eng.pdf