昨天我在c ++中创建了一个使用通过命令行传递的参数的简单程序。
E.G. myDrive:\myPath\myProgram.exe firstWord secondWord
程序运行良好,并且做了它所拥有的,但我有一点好奇心:
我必须先编写argc --;
才能使用它,否则我会遇到运行时崩溃[编译器不会说话!]。
特别是argc
给了我一个糟糕的时间,当我运行它时,我没有任何关于程序的论据......
现在它有效,所以一点也不差,但我想知道为什么会这样!
[附注:制作argc --;
并打印它,它会0
作为值!]
编辑:
这里是使用argc
int main(int argc, char *argv[]) {
[...]
argc --;
if(argc > 0){
if(firstArg.find_last_of(".txt") != string::npos){
reading.open(argv[1], ios::binary);
[...]
}
}
if ((!(firstArg.find_last_of(".txt") != string::npos)) && argc > 0){
[...]
for(int i = 1; i <= argc; i ++){
[...]
toTranslate = argv[i][j];
[...]
toTranslate = argv[i][j];
}
}
}
答案 0 :(得分:5)
参数包括程序本身的名称,因此argc
始终至少为1.
这是典型的循环:
int main(int argc, char * argv[])
{
for (int i = 0; i != argc; ++i)
{
std::cout << "Argument #" << i << ": " << argv[i] << "\n";
}
}
或者,您可以向后打印:
while (argc--)
{
std::cout << argv[argc] << "\n";
}