Когда у вас есть массив символов, самый последний байт называется нулевым ограничителем , который в данном случае равен \0
. Это то, что сообщает вашей программе, где находится конец символов в массиве.
Функция str.length()
возвращает количество байтов в строке. Нулевой символ не считается байтом. Поэтому, когда str.length()
идет для подсчета количества символов в вашем массиве, он считается, пока не достигнет \0
.
Когда вам нужно создать новый массив того же «размера», что и строка, вы должен сделать его на один байт длиннее, чтобы учесть нулевой терминатор.
Итак, ваш код должен быть:
s = (char*)malloc(length + 1);