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

kel*_*cim 0 c++

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

#include <iostream>

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

./main
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)

Jes*_*uhl 6

argv在阅读它们之前,您需要确保两个参数确实存在。在C ++中,读取未初始化的变量是未定义的行为

#include <iostream>

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

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