c ++ argv [1]以返回值9009终止程序

Mor*_*hul 2 c++

我有一个小代码来查看它argv的内容

#include <iostream>

using namespace std;
int main(int argc, char** argv){

    cout << "===================" << endl;
    cout << "argc: " << argc << endl << endl;
    cout << "argv[0]: " << argv[0] << endl << endl;
    cout << "argv[1]: " << argv[1] << endl << endl;
    //cout << "argv[2]: " << argv[2] << endl << endl; //Program crash
    cout << "===================" << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我启动没有参数的程序时:

argc1
argv[0]是执行路径
argv[1]应该超出范围,程序应该崩溃,但程序终止像我写return.如果我检查错误级别它是9009
如果我尝试访问argv[2]程序崩溃按预期

(当我用一个参数启动程序时一切正常)

为什么它不像argv[2]我访问时那样崩溃argv[1]
而对于什么是错误级别9009?

提前致谢

Sto*_*ica 7

它不会崩溃,因为它argv被定义为一个空终止的数组.最后一个元素是argv[argc],它始终包含空指针.您没有访问超出阵列的范围.

但...

您将空指针值传递给c-strings的std::ostream's' operator<<.这本身是未定义的,所以你的程序在这种情况下表现也不是很好.