为什么只有1个参数传递时argc返回2?

Bla*_*ack -4 c++ startup argv argc

我写了这个简单的代码来了解参数系统是如何工作的。我将文本文件拖到.exe文件,并得到2作为输出,而不是我期望的1。为什么是2?Arg 1是.exe本身吗?如何找到参数的文件名?

#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{
    int i = 0;
    const int max = 100000;

    if (argc > 0)
    {
        cout<< argc <<endl;
    }

    cin.get(); cin.get();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

还有一个问题。我在哪里可以告知如何访问每个参数并使用这些信息。我的目标是打开所有作为参数传递给.exe的文件。


这不是一个重复的问题,我问为什么当您传递1个参数时返回2。链接中的问题是另一个...

Ton*_*roy 5

argv[0]通常是正在运行的程序的名称,并计入argc。如果是argc >= 2,则第一个文本文件名应位于中argv[1]。您可以简单地遍历它们...

for (size_t i = 1; i < argc; ++i)
    if (std::ifstream infile(argv[i]))
        ...use infile...
    else
        std::cerr << "ERROR - unable to open " << argv[i] << '\n';
Run Code Online (Sandbox Code Playgroud)

对于更复杂的要求,getopt()如果系统提供了它,则可能要使用et al,或者使用Boost库的等效项