我正在玩C,我遇到了这个错误:
#include <stdio.h>
int main ()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
接受指针,foo
是指针,但我得到总线错误。我怎样才能使它发挥作用?
答案 0 :(得分:8)
您永远不会初始化foo
,因此它指向内存中或多或少的随机位置。将它分配到堆栈上。
char foo[10];
或者在堆上malloc:
char *foo = (char *)malloc(10 * sizeof(char));
但如果你是malloc,别忘了免费()。
注意缓冲区溢出;如果有东西需要缓冲但没有最大尺寸,请小心。例如,您可以通过scanf
指定%9s
的最大长度。但是,scanf
不会考虑终止空值,因此您需要传递少于缓冲区长度的空值。