Кент Рейсдорф. 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;