Почему эта строковая реализация выделяет на один символ больше, чем символов в строке? - PullRequest
2 голосов
/ 28 марта 2020
String::String(const String& old_str)    
{ 
    size = old_str.size; 
    s = new char[size+1]; 

Почему мы используем size+1 здесь для выделения памяти, а не size?

1 Ответ

2 голосов
/ 28 марта 2020

В C строки заканчиваются нулевым байтом, представленным \0 внутри строки. Атрибут size возвращает размер, не учитывающий нулевой байт, поэтому вы должны выделить size+1 байтов, чтобы завершающий нулевой байт не переполнялся. Подробнее о строках с нулевым символом в конце здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...