Почему мусор получается после memmove?
Потому что в C/C++ стандартные строки должны иметь завершающий символ с кодом 0x00 - признак конца строки.
Вы создали массив на десять символов, записали туда эти десять символов, но конца строки нет, поэтому вывод продолжается за пределами массива, пока не будет встречен нулевой символ.
Потому что С-строка должна завершаться нуль-терминатором.