Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2011, 20:45   #1
Юра++
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 2
По умолчанию Почему длина строки меняеться

Вот кусок кода из одной книги

Код:
class String
{
public:
   String(const String &copy);		// Конструктор копии
private:
   char *sPtr;		// Указатель на начало строки
   int length;		// Длина строки
};


String::String(const String &copy)
{
   length = copy.length;
   sPtr = new char[length + 1]; // Почему здесь вместо length написано length+1 ???
   assert(sPtr != 0);
   strcpy(sPtr, copy.sPtr);
}

Последний раз редактировалось Юра++; 11.10.2011 в 21:02.
Юра++ вне форума Ответить с цитированием
Старый 11.10.2011, 21:01   #2
Юра++
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 2
По умолчанию

И в конструкторе преобразования тоже самое
Код:
String::String(const char *s)
{
   length = strlen(s);
   sPtr = new char[length + 1];  // Откуда эта 1 появляеться и для чего она ?
   assert(sPtr != 0);
   strcpy(sPtr, s);
}

Последний раз редактировалось Юра++; 11.10.2011 в 22:54.
Юра++ вне форума Ответить с цитированием
Старый 11.10.2011, 21:04   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Юра++ Посмотреть сообщение
И в конструкторе преобразования тоже сомое
Код:
String::String(const char *s)
{
   length = strlen(s);
   sPtr = new char[length + 1];  // Откуда эта 1 появляеться и для чего она ?
   assert(sPtr != 0);
   strcpy(sPtr, s);
}
Стандартная функция strlen подсчитывает число символов в строке до завершающего нуля. Например, если есть строка "ABCD", которая хранится в символьном массиве, то strlen возвратит значение 4, тогда как массив должен иметь размерность 5, чтобы хранить еще завершающий нулевой символ.

То есть в примере вашего класса член класса length хранит длину строки без учета завершающего нулевого символа. Когда же выделяется память под массив принимается во внимание этот завершающий нулевой символ.
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 11.10.2011 в 21:07.
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длина строки в TStringGrid Vova777 Общие вопросы Delphi 1 04.09.2011 20:57
длина строки в interbase xtrustx БД в Delphi 1 27.03.2011 21:30
длина строки в DBGridе? Милана666 БД в Delphi 5 20.05.2010 12:51
Длина и сдвиг строки - Полиморфизм ArniLand Общие вопросы C/C++ 0 22.04.2010 20:39
Длина строки С++ ArniLand Общие вопросы C/C++ 7 25.03.2010 10:59