我想制作一个函数来检查 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 语句中返回,我也得到了同样的错误。
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"));
}
并且它工作正常。所以你的段错误不是由分配引起的。为了确定确切的错误是什么,您需要找到发生此问题的确切行并收集信息,直到您了解足够的信息为止。这可能是由编译器损坏、磁盘坏扇区等引起的,但是根据我的实验,这不是代码,至少不是您共享的部分。