我玩C和我碰到这个错误:SCANF失败,总线错误
#include <stdio.h>
int main()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
采用指针,foo
是指针,但我得到总线错误。我怎样才能使它工作?
我玩C和我碰到这个错误:SCANF失败,总线错误
#include <stdio.h>
int main()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
采用指针,foo
是指针,但我得到总线错误。我怎样才能使它工作?
你永远不会初始化foo
,所以它指向一个或多或少随机的位置在内存中。可以在堆栈上分配它。
char foo[10];
或内存分配它在堆上:
char *foo = (char *)malloc(10 * sizeof(char));
但是,如果你的malloc,不要忘了给free()。
注意缓冲区溢出;如果有东西需要缓冲区但没有最大尺寸,请非常小心。例如,您可以通过执行%9s
来指定scanf
的最大长度。尽管如此,scanf
将不会计入终止空值,因此您需要传递一个小于缓冲区长度的值。
还要注意,你必须分配足够的空间来存储由scanf读入的字符串。如果你只分配一个字符,如果你输入的不是空字符串,你将会得到未定义的行为(可能是段错误)。 – user168715 2010-06-06 17:57:55
这是一个常见问题 - 你想'char foo [SOMESIZE];' – 2010-06-06 17:55:14
我确实需要指针。 – 2010-06-06 17:55:37
不,你不知道。但如果你认为你这样做,'char * foo = malloc(SOMESIZE);' – 2010-06-06 17:57:37