2010-06-06 4 views
0

Я играю с C и я столкнулся с этой ошибкой:Scanf с ошибкой шины

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

scanf принимает указатель, foo является указателем, но я получаю сообщение об ошибке шины. Как я могу заставить его работать?

+0

Это FAQ - вы хотите 'char foo [SOMESIZE];' – 2010-06-06 17:55:14

+0

Я действительно хочу указатель на самом деле. –

+2

Нет, нет. Но если вы считаете, что это так, 'char * foo = malloc (SOMESIZE);' – 2010-06-06 17:57:37

ответ

8

Вы никогда не инициализируете foo, поэтому он указывает на более или менее случайное местоположение в памяти. Либо выделите его в стеке.

char foo[10]; 

Или таНос его в куче:

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

Но если вы таНос, не забудьте освободить().

И следите за переполнением буфера; если что-то берет в буфере, но не имеет максимального размера, будьте очень осторожны. Вы можете указать максимальную длину для scanf, выполнив, например, %9s. scanf не учитывает завершающий нуль, тем не менее, поэтому вам нужно передать один меньше длины вашего буфера.

+0

Обратите внимание, что вы * должны * выделить достаточно места для хранения строки, считываемой scanf. Если вы выделите только один символ, вы получите неопределенное поведение (вероятно, segfault), если вы введете что-нибудь, кроме пустой строки. – user168715

 Смежные вопросы

  • Нет связанных вопросов^_^