为什么我遇到细分错误:此代码中为11

时间:2019-05-25 18:03:03

标签: c++

我对C ++代码有疑问。我想将参数传递给我的代码,但有时它将为空。我的代码很简单。

#include <iostream>

int main(int argc, char **argv) {

  std::cout << argv[0] << std::endl;
  std::cout << argv[1] << std::endl;

}

我想要的是在没有提供的情况下显示空参数。我得到的是

./main
Segmentation fault: 11

1 个答案:

答案 0 :(得分:6)

在阅读之前,您需要确保argv中确实存在两个参数。  在C ++中,undefined behaviour是读取未初始化的变量。

#include <iostream>

int main(int argc, char **argv) {
    if (argc >= 2) {
        std::cout << argv[0] << std::endl;
        std::cout << argv[1] << std::endl;
    }
}

上面的代码还可以,因为argc告诉您argv中元素的数量,并且上面的代码仅在实际上有两个或多个元素可供读取时才读取它们。