из scanf man:
s Соответствует последовательности символов, не являющихся пробелами;следующий указатель должен быть указателем на массив символов, который достаточно длинный, чтобы содержать входную последовательность и завершающий нулевой символ ('\ 0'), который добавляется автоматически.Входная строка останавливается на пустом месте или на максимальной ширине поля, в зависимости от того, что произойдет раньше.
указание максимальной ширины поля предотвратит переполнение стека
scanf("%1023s", buf);
и обеспечит переполнение стека при использовании printfmemset:
memset(buf,0,1024);
, поэтому программа будет:
#include <stdio.h>
#include <string.h>
int main()
{
char buf[1024];
memset(buf,0,1024);
scanf("%1023s", buf);
printf("----> %s", buf);
return 0;
}