Вы можете выделить память перед вызовом scanf()
. Например:
char moving[256];
if (scanf("%255s", moving) != 1)
…oops — presumably EOF…
Вы можете использовать malloc()
вместо простого массива, но тогда вы должны помнить, чтобы освободить выделенную память. OTOH, если вы хотите вернуть данные из функции, где она читается, может быть удобнее использовать malloc()
, но подумайте о передаче указателю на пробел (и его размер?) На функцию.
Или вы можете иметь scanf()
сделать распределение памяти для вас (проверьте страницу руководства для scanf()
внимательно - читать каждую неделю до тех пор, пока вы запомнили (достаточно) его):
char *moving;
if (scanf("%255ms", &moving) != 1)
…oops — probably EOF, but perhaps OOM (out of memory)…
…use moving…
free(moving);
Да, это один из наименее известных опций в стандарте POSIX scanf()
; он не является частью стандарта C.
'moving' является указателем. На что это указывает? Ничего. Это то, что компилятор пытается вам рассказать. –