输出以下简短的argc和argv代码

Moc*_*ock 2 c++ argv argc

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {

    int i;

    i = 1;
    while (i < argc) {
        cout << argv[i] << endl;
        i = i + 1;
    }

}
Run Code Online (Sandbox Code Playgroud)

命令行参数列为bfi

我只是学习argc和argv,但据我所知,argc是从命令行传递的参数数量(本例中为3),而argv是这些参数的数组,在这种情况下为[bfi].所以使用它,我直觉地认为这个循环应该输出argv [1],然后是argv [2],然后终止.因此最终的输出是:

F

一世

但是,给出的解决方案是:

b

F

一世

哪个让我感到困惑.有人能够解释我的思维过程出错吗?

BoB*_*ish 5

argv[0] 实际上是您用来运行程序的名称.

所以,如果你跑了:

./myProgram b f i
Run Code Online (Sandbox Code Playgroud)

argv包含["./myProgram", "b", "f", "i"],和argc == 4.

(这实际上不是标准的一部分,但在大多数平台上都是正常行为).

另外,请注意保证argv[argc]==nullptr,如果你愿意,可以迭代有效指针,而不是使用索引.

for环保持迭代逻辑更多自含式比while; 您编写的循环的更常见形式将是这样的:

for (int i = 0; i < argc; ++i) {
    std::cout << argv[i] << '\n'; // see note below
}
Run Code Online (Sandbox Code Playgroud)

此外,请重新考虑您对通常被视为不良做法的使用:using namespace std;endl.