main函数可以选择传入参数,如下例:
argc–arguments count
argc–arguments value/vector
字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,长度为argc。数组下标从0开始,
argv[0] 指向程序运行时的全路径名
argv[1] 指向程序在DOS命令中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
argv[argc] 为NULL.
int main(int argc,char* argv[])
argc与argv的默认值:
那么这两个数值具体指的是什么呢?来做一些实验
int main(int argc,char* argv[]) {
std::cout << argc;
}
首先以上例测试,输出结果argc=1.说明不手动传入任何参数的时候,argc的值仍然为1,即可以认为main中有一个自动传入的参数,那么这个参数是什么的?
那我们注意到还有个argc这个参数,我们来试一试。
源程序1
int main(int argc,char* argv[]) {
std::cout << "the value of the argv[0] is\n ";
std::cout << argv[0];
std::cout<<"\nthe argument count is:\n " << argc << "\n\n";
}
写一个简单的检验程序,输出如下:
输出如上图,那么可以看出argv[0]所指向的内容为这个exe文件的名字,那么结合argc为1,可以得出一个结论:默认的argc为1是因为每次执行可执行文件的时候argv的第一个元素都指向了可执行文件的名字,所以参数自然为1。
如何增加argc的值?
那么在了解到argc默认值为1之后,理所应当思考如何增加argc的值。首先分析概念:argc是传进main函数的参数。那我们来尝试一下给main函数传递参数:
#include<iostream>
int main(int argc, char* argv[],int value) {
//codes are same as above
}
好这样指定之后,在main函数的参数列表里面加一个int value
,然后输出发现argc的值仍为1.这说明这样不能增加argc的参数
同理,在main函数里面定义一些参数同样不能使argc增加。这些方法都不是传进main函数的参数。
传进main函数的参数
那么如何给main传进参数呢?首先需要了解使用cmd来执行exe文件。
- 在vs等ide中调试使其生成可执行文件。
- 打开cmd,输入以下命令:
然后输出要执行的exe文件名,再输入我要传入的参数:
好了可以看到这时arguments count的值已经变为2.传入的参数并不一定会被程序所使用,但一定会被argc所统计。
以上实例中所使用的程序均为源程序1,但为了方便对之前exe文件的名字做了修改。
一个小问题:既然程序一样为什么第一次输出的exe文件名如此之长,而第二次的输出却相当简洁呢?
——因为第一次输出的时候没有指定路径,系统默认从根开始,所以会写出绝对路径。而第二次已经给好了大环境的路径,那么输出的时候会只需要输出相对路径即可。
一些注意事项
- 如果文件名里有空格怎么做?
可以加上双引号,这样双引号里的整体内容会被当作一个整体。