Строки
C, такие как строковый литерал "test"
, заканчиваются NUL, что означает, что последний символ равен '\ 0':
{'t', 'e', 's', 't', '\0'}
Вам нужно будет использовать st[5]
и скопировать 5символы, чтобы иметь место для (и включить) NUL.Как есть, вы не включили его в копию.Таким образом, st
выглядит следующим образом:
{'t', 'e', 's', 't', X, X, X ... '\0'}
Когда вы печатаете, C продолжает читать бессмысленные значения, которые совпадают в памяти (X выше), пока не найдет NUL.
Лучшее решение - исключить memcpy
, и пусть компилятор определит размер вашей инициализации:
char st[] = "test";
sizeof(st)
теперь будет 5.