Выделите место для char Строковая конструкция получила пространство для данных, выполнив new char[strlen(cp)+1]; Так как в строке есть только strlen(cp) символов, что такое дополнительный байт для? Ответ 1 Для специальный '\0' char, который указывает конец строки. (Помните, строки C-стиля представляют собой массивы с нулевым завершением). Дополнительные замечания: strlen не учитывает '\0' (для этого вам нужен этот дополнительный байт). strcpy копирует '\0'. char str[7] = "String"; - добавляет '\0' самостоятельно. char str[] = {'S','t','r','i','n','g'} - не добавляет '\0'. char str[7] = {'S','t','r','i','n','g'} - добавит '\0'. Ответ 2 В строках на основе C всегда есть специальный символ в конце строки '\0', которому также нужен дополнительный байт. Вот почему нам нужен дополнительный символ, и нам нужен массив strlen(str)+1 для хранения строки.
Ответ 1 Для специальный '\0' char, который указывает конец строки. (Помните, строки C-стиля представляют собой массивы с нулевым завершением). Дополнительные замечания: strlen не учитывает '\0' (для этого вам нужен этот дополнительный байт). strcpy копирует '\0'. char str[7] = "String"; - добавляет '\0' самостоятельно. char str[] = {'S','t','r','i','n','g'} - не добавляет '\0'. char str[7] = {'S','t','r','i','n','g'} - добавит '\0'.
Ответ 2 В строках на основе C всегда есть специальный символ в конце строки '\0', которому также нужен дополнительный байт. Вот почему нам нужен дополнительный символ, и нам нужен массив strlen(str)+1 для хранения строки.