Q1。当我打印argc时,argc = 3?魔法3从哪里来?
argc
和argv
在命令行中用于将输入传递到您的程序。 argc
存储通过输入的数量,argv
存储输入的值。
argv
被声明为char*[]
,也就是说指向char的指针数组。这意味着,你通过的每一个输入,独立于它的本质(数字,字符或任何其他)将被视为char*
,并且将是该矢量的一个元素。
从命令行,你可以执行你的程序的打字:
./myProgram input1 input2
现在,input1
和input2
将被传递到您的主要功能参数。 argv
将等于您传递的输入数+ 1,因为程序的名称实际上被视为您程序的输入。在这种情况下,您通过2个输入,因此argv
= 3.
Q2。由于argc的类型是int,所以我应该将argc读为const char *,然后是input_file.open()正确?
不,你应该阅读这样你输入:
input_file.open(argv[1]); // <-- input1 is located at index 1
output_file.open(argv[2]); // <-- input1 is located at index 2
Q3。 argv是我的输出名称,但为什么argv []的类型是char *。我想到的argv类型为字符串,因为输出文件的名称是字符串
应该清楚你所有的投入都存储在argv[]
并且您可以伊斯利通过数组访问它们:
argv[1] = imput1
argv[2] = imput2
argv[3] = imput3
...
注: argc
通常在使用,如果条件避免访问非法内存区域。考虑下面的程序:
int main(int argc, char* argv[])
{
std::cout << argv[1];
std::cout << argv[2];
std::cout << argv[3];
return 0;
}
如果你运行你的程序:
./myProgram输入1输入2
,你可能会得到一个分段错误,因为你正在试图访问argv[3]
由于数组argv
只有3个元素,所以不存在。
您可以防止使用argc
此崩溃:
int main(int argc, char* argv[])
{
if (argc == 4)
{
std::cout << argv[1];
std::cout << argv[2];
std::cout << argv[3];
}
else
std::cout << "Please, provide 3 inputs." << std::endl;
return 0;
}
来源
2017-10-06 06:53:55
Neb
我建议你做类似'的for(int i = 0;我
请阅读[文档](http://en.cppreference.com/w/cpp/language/main_function)。 –
@Someprogrammerdude哦!它现在正在工作!谢谢! :))))) – Mengge