我这里使用的编译器是visual studio 2017。
当我们的C++的main函数写成了如下形式,就表示main函数中已经有参数了
int main(int argc,char* argv[]) { ... }
其中第二个形参argv(argument value)是一个数组,数组中的每个元素都指向一个字符串;第一个形参argc(argument count)表示数组中元素个数,argc会根据argv的个数自动变化,不需要用户关心。因为第二个形参是指向字符串的数组,因此main函数也可以写成:
int main(int argc,char** argv) { ... }
首先,即使不向main函数传递任何参数,它也会有一个默认的参数,比如我们直接运行如下代码来显示main函数中参数个数:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
cout << argc << endl;
system("pause");
return 0;
}
会出现下图的结果:
这就表示已经有一个argv的参数了,那么这个参数是什么呢,尝试用以下代码打印一下argv的值:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
cout << argc << endl;
cout << *argv << endl;
system("pause");
return 0;
}
结果如图:
可以看到第二行的输出就是argv中的值,它表示的是程序运行的全路径名,也就是我的可执行文件的绝对路径名。
下面我们就来看看如何向main函数中传递参数。
1.通过命令行向main函数传递参数
为了方便展示结果,我先写一段测试代码,它所实现的功能就是显示mian函数中参数的个数并全部打印出来
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
cout << argc << endl;
for (int i = 0; i < argc; i++)
{
cout << i << ":" << argv[i] << endl;
}
system("pause");
return 0;
}
接下来的步骤:
1.1 先按F7生成可执行文件exe。
1.2 找到上一步生成的可执行文件的目录,比如我的是:C:\Users\Administrator\Desktop\视频编码资料\C++program\Test\Debug,然后复制该目录。
1.3 按Win + R,输入cmd打开命令行,然后输入 cd + 空格 + 刚才复制的目录切换到该目录,如图:
1.4 然后在命令行中输入参数,即字符串,自己任意输入就好,字符串之间用字符隔开,但第一个字符串一定要是自己的可执行文件的名字!然后按下回车,即可看到结果:
可以看到成功地向main函数中传递了参数!
2.通过visual studio来传递命令参数
这里仍用到一个与之前类似的代码来显示命令参数的个数和命令参数的值:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
cout << argc << endl;
for (int i = 0; i < argc; i++)
{
cout << "argv[" << i << "]:" << argv[i] << endl;
}
system("pause");
return 0;
}
接着在项目名字上右击,选择“属性”,会出现如下窗口,然后再“配置属性”的“调试”中的“命令参数”中输入一些字符串,字符串不用加双引号,字符串之间用空格隔开,如图,我输入了两个字符串,分别是“encode.cfg”和“test.yuv”,输入完成之后点击右下角的“应用”,再点击“确定”
然后运行程序,出现如下结果:
至此成功通过visual studio向main函数传递了参数。