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

Output of the Following Short argc & argv Code

#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;
    }

}

命令行参数列为 b f i

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

f

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

b

f

这让我感到莫名其妙。谁能解释一下我的思维过程哪里出了问题?

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

所以如果你 运行:

./myProgram b f i

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

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

顺便说一句,请注意 运行argv[argc]==nullptr,因此如果您愿意,可以遍历有效指针,而不是使用索引。

for 循环使迭代逻辑比 while 更多 self-contained;您编写的更常见的循环形式如下:

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

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