I have the following code:
int get_int(void) {
char input[10];
fgets(input, 10, stdin); // Segfault here
return atoi(input);
}
在标记处,程序出现了段错误。我完全不知道问题出在哪里,因为我在另一个程序中使用了以下代码:
int main(void) {
char card[17];
printf("Number: ");
fgets(card, 17, stdin);
printf("%s\n", card_type(card));
return 0;
}
它能正常工作。我十分确定它不会在 atoi 上出现段错误。
其他人是否能复现这个问题?我使用的是 Linux amd64 平台和 GCC 4.4.5 编译的,没有警告信息。
由于有人要求,这里是调用 get_int 函数的代码:
void get_input(int *inputs) { // Stop cluttering up my main
printf("M spotting F: ");
inputs[0] = get_int();
printf("F spotting M: ");
inputs[1] = get_int();
printf("F spotting F: ");
inputs[2] = get_int();
printf("M spotting M: ");
inputs[3] = get_int();
}
调用该代码的是:
int main(void) {
int *inputs[4];
int *heights[4];
get_input(*inputs);
get_heights(*inputs, *heights);
print_bars(*heights);
printf("M4F F4M F4F M4M\n");
}
因此,您已经到达了调用堆栈的顶部。