以下简称argc&的输出argv代码

时间:2017-02-03 08:12:25

标签: 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;
    }

}

命令行参数列为b f i

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

˚F

I

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

B'/强>

˚F

I

这令我感到困惑。是否有人能够解释我的思维过程出错的地方?

1 个答案:

答案 0 :(得分:5)

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

所以,如果你跑了:

./myProgram b f i

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
}

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