Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 30

Я не буду приводить примеры использования всех функций, перечис­ленных в таблице, а ограничусь только наиболее широко используемыми. Функция strcpyO копирует одну строку в другую. Исходная строка может быть переменной или строковой константой. Рассмотрим для примера сле­дующий фрагмент:

// выделение памяти для строки из 2 9 символов char buff[30];

// копирование строковой константы в буфер

strcpy(buff, "This is a test.");

// вывод строки на экран

cout << buff << endl;

// инициализация второго буфера

char buff2[] = "A second string.");

// копирование содержимого этой строки в первый буфер strcpy(buff, buff2); cout « buff « endl;

Случайный выход за верхнюю границу символьного массива еще более вероятен, чем для числовых массивов, обсуждавшихся ранее. Например, пред­ставьте, что вы сделали следующее:

char buff[10] = "A string"; П ...

strcpy(buff, "This is a test."); // ошибка!

Здесь мы объявили символьный массив для хранения 10 символов и инициализировали его строкой, требующей 9 байт (не забывайте о заверша­ющем нуль-символе). Позднее, возможно, забыв о величине массива, мы скопировали в буфер строку, требующую 16 байт, и тем самым вышли за границу массива на 6 байт. В результате этого небольшого ложного шага где-то в памяти были испорчены шесть байт. Будьте осторожны, копируя данные в символьные массивы.

Другая часто используемая при работе со строками функция — sprintf(). Эта функция позволяет получить форматированную строку, состоящую из текста и чисел. В следующем примере складываются два числа, после чего используется функция sprintf() для построения строки, сообщающей о ре­зультате:

char buff[20]; int х = 10 * 20;

sprintf(buff, "The result is: %d", x) ; cout << buff;

Web-дизайн (с) 2010 All rights reserved