0

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

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

scanf需要指针,foo是指针,但我得到总线错误。我怎样才能让它工作?

4

1 回答 1

8

您从不初始化foo,因此它指向内存中或多或少的随机位置。要么在堆栈上分配它。

char foo[10];

或者在堆上 malloc :

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

但是如果你 malloc,不要忘记 free()。

并注意缓冲区溢出;如果某些东西占用了缓冲区但没有最大大小,请非常小心。scanf例如,您可以通过do 指定最大长度%9sscanf但是,不会考虑终止的空值,因此您需要传递比缓冲区长度小一的值。

于 2010-06-06T17:56:16.837 回答