#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
这令我感到困惑。是否有人能够解释我的思维过程出错的地方?
答案 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
。