我写了一些基本代码
#include <iostream>
using namespace std;
int main( int argc, char *argv[] ){
for (int i=1;i<=argc;i++){
cout << argv[i] <<"\n";
}
cout <<"hello";
return 0;
}
当我用
运行它时./a.out 1 2 3
我明白了:
1
2
3
为什么没有“你好”?
答案 0 :(得分:4)
你的循环尝试流式传输argv[argc]
,这是你的程序参数后的一个。
实际上,它被定义为空指针 1 ,并且为流提供空指针将其错误位设置为 2 。
因此,您的下一个流操作(cout << "hello"
)将失败。
循环至argc
,但不包括:
for (int i = 1; i < argc; i++) {
cout << argv[i] << '\n';
}
[C++11: 3.6.1/2]:
[..]argv[argc]
的值应为0. [..]
[C++11: 27.7.3.6.4/3]:
要求:s
不应为空指针
如果是,则行为未定义; GCC选择捕获条件并设置流的错误位 - 请参阅https://stackoverflow.com/a/7019483/560648。
答案 1 :(得分:1)
你引用的是超出数组的argv [argc]。
将您的for语句更改为:
for (int i=1;i<argc;i++){