关闭

[C/C++基础知识] main函数的参数argc和argv

标签: C++mainargcargv参数
29188人阅读 评论(9) 收藏 举报
分类:

该篇文章主要是关于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 mainC++ 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)

14
0
查看评论

argc与argv

main函数是可以带参数的,不过这个参数可以认为是它的形式参数 C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,c语言main函数的两个参数可写为 main(int argc,char *argv[]) argc的值是命令行参数的个数 什...
  • wumengchao1234
  • wumengchao1234
  • 2016-03-19 17:07
  • 546

argc, argv 你真的理解了吗?

argc, argv 你真的理解了吗? 体会一下指针的灵活性和2级指针的使用。 本来我以为我早就理解了argc,argv[] 但是当我看到有人使用 **argv, **++argv, *++*argv时 还是让我犯晕,特此记录。 #include int main(int ...
  • hejinjing_tom_com
  • hejinjing_tom_com
  • 2015-07-31 18:42
  • 2130

C++ main函数中参数argc和argv含义及用法

argc 是 argument count的缩写,表示传入main函数的参数个数; argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应...
  • dcrmg
  • dcrmg
  • 2016-07-22 00:08
  • 23150

c语言中main函数参数argc,argv说明,及命令行中如何传参数

方法1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv[]) 这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,arg...
  • woshiwangbiao
  • woshiwangbiao
  • 2016-11-28 16:18
  • 7636

argc与argv

argc,argv 用命令行编译程序时有用。 主函数main中变量(int argc,char *argv[ ])的含义 有些编译器允许将main()的返回类型声明为void,这已不再是合法的C++ main(int argc, char *argv[ ], char **env[ ])才是U...
  • chenhezhuyan
  • chenhezhuyan
  • 2013-06-09 20:36
  • 2095

Linux下解析argc和argv参数

int main(int argc,char *argv[]); 第一个参数argc用来存放命令行参数的个数 第二个参数argv是指针数组,它是用来存放命令行中各个参数和命令字的字符串的 这里,argc的值和argv[]各元素的值都是系统自动组赋值的。 结果如下:
  • sun1314_
  • sun1314_
  • 2017-05-06 16:46
  • 1869

看清main(argc,**argv)

我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)...
  • whillcoxdennis
  • whillcoxdennis
  • 2009-04-06 16:36
  • 14369

argc,argv的用法

main(int argc,char *argv[ ])argv为指针的指针argc为整数char **argv or: char *argv[] or: char argv[][]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法:假设程序的名称为prog,当只输入prog,则...
  • u014413083
  • u014413083
  • 2016-12-04 10:56
  • 1005

argc 和 argv 经典实例

原文地址:http://blog.chinaunix.net/uid-26727991-id-3087765.html main(int argc,char *argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[] o...
  • liu1guo2qiang3
  • liu1guo2qiang3
  • 2015-08-25 22:03
  • 788

argc,argv

argc,argv 用命令行编译程序时有用。   主函数main中变量(int argc,char *argv[ ])的含义   我们平时定义主函数时通常的写法为:int main( )或void main( )   其实,int main( ) 只是 UNIX 及 Linux 默许的用法, ...
  • sircarfield
  • sircarfield
  • 2011-11-14 19:34
  • 7574
    个人资料
    • 访问:2326959次
    • 积分:21613
    • 等级:
    • 排名:第413名
    • 原创:270篇
    • 转载:10篇
    • 译文:0篇
    • 评论:1651条
    个人博客
    作者:杨秀璋
    学历:本科-北京理工大学
               硕士-北京理工大学
    现任教于贵财财经大学信息学院
    http://www.eastmountyxz.com

    简介:自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。

    贵州纵美路迢迢,
    为负劳心此一遭。
    收得破书三四本,
    也堪将去教尔曹。

    娜美人生,醉美生活。
    他和她经历风雨,慢慢变老。
    博客专栏
    牛人博客
    最新评论