Scanf не работает с ошибкой шины - PullRequest
0 голосов
/ 06 июня 2010

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

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

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

1 Ответ

8 голосов
/ 06 июня 2010

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

char foo[10];

Или malloc это в куче:

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

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

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

...