Driver86
@Driver86
Немодератор toster.ru

Почему мусор получается после memmove?

#include <stdio.h>
#include <string.h>

int main (void)
{
    unsigned char src[10] = "0123456789";

    printf ("src old: %s\n", src);

    memmove (&src[4], &src[3], 3);

    printf ("src new: %s\n", src);

    return 0;
}


Компилю: gcc 0.c -o 0

Запускаю: ./0

В итоге, в консоли мусор после строк:
src old: 0123456789wV
src new: 0123345789wV

Каждый раз разный. Почему?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в C/C++ стандартные строки должны иметь завершающий символ с кодом 0x00 - признак конца строки.
Вы создали массив на десять символов, записали туда эти десять символов, но конца строки нет, поэтому вывод продолжается за пределами массива, пока не будет встречен нулевой символ.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
Потому что С-строка должна завершаться нуль-терминатором.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы