以下简短 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
。
#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
。