main函数的参数argc和argv

一.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.计算命令行参数个数程序如下:


 
 
  1. <strong> //C 输出参数个数
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main(int argc,char *argv[])
  5. {
  6. printf( "参数个数=%d\n",argc);
  7. system( "PAUSE");
  8. return 0;
  9. }
  10. //C++ 输出参数个数
  11. #include <iostream>
  12. using namespace std;
  13. int main(int argc,char *argv[])
  14. {
  15. cout<< "参数个数="<<argc<< endl;
  16. system( "PAUSE");
  17. return 0;
  18. }</strong>

调用"运行"(快捷键Ctrl+R)或"cmd"输入"G:\test.exe"会输出"参数个数=1",此时存储的就是执行程序名.输入"G:\test.exe 2 hello good"输出"参数个数=4":

2.查看argv[]二维数组存储具体字符串的代码如下:


 
 
  1. <strong> //C 查看argv存储参数值及对应序号
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main(int argc,char *argv[])
  5. {
  6. int i;
  7. printf( "参数个数=%d\n",argc);
  8. for(i= 0; i<argc; i++)
  9. {
  10. printf( "参数序号=%d ",i);
  11. printf( "参数值=%s\n",argv[i]);
  12. }
  13. system( "PAUSE");
  14. return 0;
  15. }
  16. //C++ 查看argv存储参数值及对应序号
  17. #include <iostream>
  18. using namespace std;
  19. int main(int argc,char *argv[])
  20. {
  21. cout<< "参数个数="<<argc<< endl;
  22. for( int i= 0; i<argc; i++)
  23. {
  24. cout<< "参数序号="<<i<< " ";
  25. cout<< "参数值="<<argv[i]<< endl;
  26. }
  27. system( "PAUSE");
  28. return 0;
  29. }</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实现单词转换的例子就涉及到该运用,这里只讲述涉及到该参数的部分代码供大家参考,大家可以自己去学习了解:


 
 
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc,char *argv[])
  4. {
  5. //参数个数=3:工程名\读取txt文件\写入txt文件
  6. if(argc!= 3)
  7. throw runtime_error( "wrong number of arguments");
  8. //打开转换文件,argv[1]为读取的要转换txt文件名 open_file自定义打开函数
  9. if(!open_file(map_file,argv[ 1]))
  10. throw runtime_error( "no transformation file");
  11. //打开要转换的写入txt文件
  12. if(!open_file(input,argv[ 2]))
  13. throw runtime_error( "no input file");
  14. return 0;
  15. }

其中具体操作是通过map(键-值对的集合)对象来实现,推荐大家看看这本最经典的C++书籍. 转载于“https://blog.csdn.net/Eastmount/article/details/20413773”

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值