为什么当我返回或更改 for 循环内的值时会出现分段错误?

问题描述 投票:0回答:1

我想制作一个函数来检查 option 的值并确定它是肯定还是否定,然后返回 1、0 或 -1。

但是,当我更改 for 循环内的

opt
的值时,出现分段错误。

这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int get_bool_from_option(char *option) {
  const int length = 3;
  char *yes[] = { "yes", "true", "on" };
  char *no[] = { "no", "false", "off" };
  
  int opt = -1;
  for (int i=0; i<length; i++) {
    if (strcmp(option, yes[i]) == 0) {
      opt = 0;
      break;
    } else if (strcmp(option, no[i]) == 0) {
      opt = 1;
      break;
    }
  }

  return opt;
}

即使直接在 if 语句中返回,我也得到了同样的错误。

c segmentation-fault
1个回答
0
投票
像您一样在循环内为

opt

 赋值肯定不是段错误的原因。我在 
https://www.mycompiler.io/new/c via 测试了你的代码

#include <stdio.h> #include <string.h> #include <stdlib.h> int get_bool_from_option(char *option) { const int length = 3; char *yes[] = { "yes", "true", "on" }; char *no[] = { "no", "false", "off" }; int opt = -1; for (int i=0; i<length; i++) { if (strcmp(option, yes[i]) == 0) { opt = 0; break; } else if (strcmp(option, no[i]) == 0) { opt = 1; break; } } return opt; } void main() { printf("%d", get_bool_from_option("false")); }
并且它工作正常。所以你的段错误不是由分配引起的。为了确定确切的错误是什么,您需要找到发生此问题的确切行并收集信息,直到您了解足够的信息为止。这可能是由编译器损坏、磁盘坏扇区等引起的,但是根据我的实验,这不是代码,至少不是您共享的部分。

© www.soinside.com 2019 - 2024. All rights reserved.