Для такой простой задачи обычно проще всего циклически перебирать символ за символом:
void trim(char* buffer)
{
char* r = buffer;
char* w = buffer;
for (;;)
{
char c = *r++;
if (c != ' ')
*w++ = c;
if (c == '\0')
break;
}
}
Безопасно использовать один и тот же буфер для чтения и записи, потому что мы знаем, что обрезанная строка всегда будеткороче оригинальной строки.Это самое быстрое из возможных решений, поскольку каждый символ читается один раз и записывается не более одного раза.
Вы не можете использовать strcpy (), когда источник и пункт назначения перекрываются - спецификация запрещает это.
Я не знаю о scanf ();внутри него скрыты всевозможные неясные, но полезные вещи, и стоит заглянуть в справочную страницу.
Отредактировано: исправлена глупая опечатка, из-за которой она не работала.