程序在打印argv后停止工作

时间:2014-03-29 21:07:59

标签: c++ argv

我写了一些基本代码

#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

为什么没有“你好”?

2 个答案:

答案 0 :(得分:4)

你的循环尝试流式传输argv[argc],这是你的程序参数后的一个

实际上,它被定义为空指针 1 ,并且为流提供空指针将其错误位设置为 2

因此,您的下一个流操作(cout << "hello")将失败。

循环至argc ,但不包括

for (int i = 1; i < argc; i++) {
    cout << argv[i] << '\n';
}

脚注1

  

[C++11: 3.6.1/2]: [..] argv[argc]的值应为0. [..]

脚注2

  

[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++){