gpt4 book ai didi

c++ - '段错误(核心转储)'与案例

转载 作者:太空狗 更新时间:2023-10-29 20:53:22 28 4
gpt4 key购买 nike

'Segmentation fault (core dumped)' 在我执行以下程序时出现。但是,如果我使用 if...else 语句,它不会给我任何错误。在这种情况下,错误消息的原因是什么?如何使用 case 语句而不出错?

#include <iostream>
#include <cstdlib>
using namespace std;

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

/*
if (argc == 1){
cout << argv[0] << endl;
}else
if (argc == 2){
int n;
n = atoi(argv[0]);
cout << n << endl;
}
*/
switch (argc){
case 1:{
cout << argv[0] << endl;
}
case 2:{
int n;
n = atoi(argv[1]);
cout << n << endl;
}
}

return 0;
}

最佳答案

switch block 中没有break。因此,每种情况都会失败。这会在 argc1 时调用未定义行为。当您不想失败时,您应该打破开关

switch (argc){
case 1:{
cout << argv[0] << endl;
break;
}
case 2:{
int n;
n = atoi(argv[1]);
cout << n << endl;
break;
}
}

从 C++17 开始,当编译器警告您有关隐式 fallthroughs(这不是必需的)时,您可以使用属性 [[fallthrough]] 来声明你的失败是故意的。

关于c++ - '段错误(核心转储)'与案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com