Глава 21. Понятие строк в ANSI С и ANSi C++________________________577

Наконец, функция c_str

const char *charPointer = lengthString.c str();

cout « charPointer « endl;

дает следующий результат:

Какова длина этой строки?

Функция c_str возвращает ссылку на завершаемый нулем массив символов (данные, содержащиеся в экземпляре строки). Никогда не записывайте ничего в эту строку; при внесении любых изменений в экземпляр строки указатель станет недействительным. Если вы хотите воспользоваться этим значением, то используйте функции ANSI С, такие как strcpy, или функцию строкового класса copy.

Исключительные ситуации строкового класса

Строковый класс ANSI C++ фирмы Borland может генерировать несколько исключительных ситуаций (exceptions). Если вы хотите их использовать, то вам потребуется в вашем исходном коде перед заголовком cstring.h включить директиву ttdefine USE_THROW_SPECIFIERS (более подробная информация приведена в файле cstring.h). Строковый класс Borland генерирует следующие исключительные ситуации: xalloc (в конструкторах; это не. является условием ошибки), string: :outof range (ошибка перехода допустимых границ для строки; например, s[64], когда строка s имеет в длину только восемь символов), и string :lengtherror (указана неправильная длина строки; например, вы повторили символ "z" в конструкторе слишком большое число раз и для этого не хватило памяти).

Если вы хотите обрабатывать эти исключительные ситуации, то просто перехватите их и попытайтесь исправить ошибку или выдайте пользователю сообщение об ошибке. Приведем пример проверки наличия достаточного количества памяти для новой строки. Для этого поместим конструктор строкового класса в блок try и перехватим (catch) исключительную ситуацию string: :lengtherror. Как только возникнет ситуация нехватки памяти, мы предупредим об этом пользователя сообщением "sorry, out of memory":

try

{

// Это длинная (8К) строка из букв Z, создание которой // при недостатке памяти закончится ошибкой String ( '?,', 8192);

catch (string::lengtherror)