Scanf因总线错误而失败

时间:2010-06-06 17:52:42

标签: c pointers scanf bus-error

我正在玩C,我遇到了这个错误:

#include <stdio.h>
int main ()
{
 char* foo;
 scanf("%s", foo);
 printf("entered %s", foo);
 return 0;
}

scanf接受指针,foo是指针,但我得到总线错误。我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:8)

您永远不会初始化foo,因此它指向内存中或多或少的随机位置。将它分配到堆栈上。

char foo[10];

或者在堆上malloc:

char *foo = (char *)malloc(10 * sizeof(char));

但如果你是malloc,别忘了免费()。

注意缓冲区溢出;如果有东西需要缓冲但没有最大尺寸,请小心。例如,您可以通过scanf指定%9s的最大长度。但是,scanf不会考虑终止空值,因此您需要传递少于缓冲区长度的空值。