![7b1b7e726424168c1f5be5a5343b9dbb.png](https://i-blog.csdnimg.cn/blog_migrate/63131d12a40f1dd2da00355a69f15867.png)
1、argc 和 argv
一般入门C或者C++基础知识时,主函数都是直接用的下面形式:
#include
而在C++标准中,其实main函数的主要形式有:
int
前者就是前面提到的形式,而后者在C++开发中更常用到,那后者main函数的argc和argv参数是什么意思呢?
这两个参数主要是用来保存程序运行时传递给main函数的命令行参数的。
- argc:是argument count 的缩写,保存运行时传递给main函数的参数个数。
- argv:是argument vector 的缩写,保存运行时传递main函数的参数,类型是一个字符指针数组,每个元素是一个字符指针,指向一个命令行参数。
argv[0]指向程序运行时的全路径名;
argv[1] 指向程序在命令行中执行程序名后的第一个字符串;
argv[2] 指向程序在命令行中执行程序名后的第二个字符串;
以此类推直到argv[argc]......
argv[argc] 在C++中指向nullptr,在C语言中指向NULL。
2、实验验证
运行如下代码:
#include
先再vs中打断点:
![1f550792572adc3e2ab062a1a112f8fb.png](https://i-blog.csdnimg.cn/blog_migrate/718d18b9a0fe8db9259b778c3dd32f64.jpeg)
运行程序后先在DOS中输出:
![12678635f6d20979c9d32d91e79d3e57.png](https://i-blog.csdnimg.cn/blog_migrate/d414f0087c803c621b585f69be0e4ba5.png)
然后程序崩溃:
![2b107ca8eb092f63b62b624bcd245497.png](https://i-blog.csdnimg.cn/blog_migrate/75e5272ce73cc7d754175afe8d510a71.png)
原因在于程序第13行引用数组越界,因为argv[argc] = nullptr(NULL):
cout
将改行注释掉并重新编译生成,再从命令行启动程序,并在后面增加参数,每个参数用空格分隔:
![f4be0e43cf806b24ba66151f05cae7d7.png](https://i-blog.csdnimg.cn/blog_migrate/199b07be9d984e31807e8986a334f7a2.png)
结果如下:
![405dfecc59e87882a454e0371b4ac273.png](https://i-blog.csdnimg.cn/blog_migrate/1e394a73a2ae1ec4842e93b049b5b928.png)
因此便可说明前述是正确的。