【发布时间】:2011-02-28 00:57:03
【问题描述】:
我有以下代码:
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;
}
而且效果很好。我 100% 确定它没有在 atoi 上出现段错误。
这是否可以被其他人重现,我在使用 GCC 4.4.5 的 Linux amd64 上。它编译并且不输出任何警告。
既然被请求了,下面是调用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");
}
因此您已经到达调用堆栈的顶部。
【问题讨论】:
-
您在标准输入上提供什么输入?
-
我已经使用以下值对其进行了测试:10、1、400、40000000 和 4adf
-
无法重现它...也许您应该发布更多关于您提供的第一个示例附带的代码(但失败了)。
-
这可能是某种空终止问题(虽然我现在想不出确切的原因)?
标签: c segmentation-fault fgets