【发布时间】:2010-06-06 17:52:42
【问题描述】:
我在玩 C 并且遇到了这个错误:
#include <stdio.h>
int main ()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf 接受指针,foo 是指针,但我得到总线错误。我怎样才能让它发挥作用?
【问题讨论】:
-
这是一个常见问题解答 - 你想要
char foo[SOMESIZE]; -
不,你没有。但是,如果您认为可以,
char * foo = malloc( SOMESIZE ); -
你这样做的方式永远不会安全。这是通向不安全和脆弱的 C 程序的道路,而 C 也因此而臭名昭著:无论分配给
foo的大小如何,程序的用户总是会溢出它并导致程序崩溃。请改用fgets。 (注意:这不是你的错,初学者很难看出哪些功能可以安全使用)
标签: c pointers scanf bus-error