2010-06-06 71 views
0

我玩C和我碰到这个错误:SCANF失败,总线错误

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

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

+0

这是一个常见问题 - 你想'char foo [SOMESIZE];' – 2010-06-06 17:55:14

+0

我确实需要指针。 – 2010-06-06 17:55:37

+2

不,你不知道。但如果你认为你这样做,'char * foo = malloc(SOMESIZE);' – 2010-06-06 17:57:37

回答

8

你永远不会初始化foo,所以它指向一个或多或少随机的位置在内存中。可以在堆栈上分配它。

char foo[10]; 

或内存分配它在堆上:

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

但是,如果你的malloc,不要忘了给free()。

注意缓冲区溢出;如果有东西需要缓冲区但没有最大尺寸,请非常小心。例如,您可以通过执行%9s来指定scanf的最大长度。尽管如此,scanf将不会计入终止空值,因此您需要传递一个小于缓冲区长度的值。

+0

还要注意,你必须分配足够的空间来存储由scanf读入的字符串。如果你只分配一个字符,如果你输入的不是空字符串,你将会得到未定义的行为(可能是段错误)。 – user168715 2010-06-06 17:57:55