Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловыми потоками.doc
Скачиваний:
2
Добавлен:
10.07.2015
Размер:
101.38 Кб
Скачать

2) Копирование строк

Значения строк могут копироваться из одной в другую. Для этой цели используют ряд стандартных функций.

Функция strcpy () имеет прототип:

char* strcpy(char* strl, const char* str2)

и выполняет побайтное копирование символов из строки, на которую указывает str2, в строку по указателю strl. Копирование прекращается только в случае достижения нуль-терминатора строки str2, поэтому перед копированием необходимо удостовериться, что длина str2 меньше или равна длине strl. В противном случае возможно возникновение ошибок, связанных с наложением данных.

Например, следующий фрагмент копирует в строку Str значение строки "Проверка копирования":

char Str[20];

strcpy(Str, "Проверка копирования");

Можно производить копирование не всей строки, а лишь отдельного ее фрагмента (до конца строки). При этом второй параметр является указателем на некоторый элемент строкового массива. Например, следующий фрагмент скопирует в str2 окончание строки strl:

char strl[20] = "Проверка копирования";

char str2[20];

char* ptr = strl;

ptr += 9;

// ptr теперь указывает на подстроку "копирования" в строке strl

strcpy(str2, ptr);

cout << str2 << '\n';

При выполнении программы будет выведен текст: копирования.

Функция strncpy () отличается от strcpy () тем, что в ее параметрах добавляется еще один аргумент, указывающий количество символов, не больше которого будет скопировано. Ее синтаксис имеет вид:

char* strncpy(char* strl, const char* str2, size_t num)

Если длина strl меньше длины str2, происходит урезание символов:

char cLong[] = "012345678901234567890123456789";

char cShort[]="abcdef";

strncpy(cShort, cLong, 4);

cout << cShort <<'\n';

cout << cLong <<'\n';

В результате будет выведено:

0123ef

012345678901234567890123456789

То есть из строки cLong в строку cShort скопировано четыре первых символа, затерев тем самым исходное значение начала короткой строки.

Функция strdup () в качестве параметра получает указатель на строку-источник, осуществляет распределение памяти, копирует в отведенную область строку и возвращает указатель на начало полученной строки-копии. Синтаксис функции следующий:

char* strdup(const char* source)

В следующем примере производится копирование строки strl в строку str2:

char* strl = "Процедура не найдена";

char* str2;

str2 = strdup(strl);

3) Конкатенация (или присоединение) строк довольно часто используется для образования новой строки символов. Для этой операции стандартная библиотека предлагает функции strcat() и strncat().

Функция strcat () имеет синтаксис:

char* strcat(char* strl, const char* str2)

В результате работы функции содержимое строки, на которую указывает str2, присоединяется к содержимому строки, на которую ссылается strl. Возвращаемый функцией указатель strl указывает на результирующую строку. При этом величина строкового массива strl должна быть достаточной для хранения объединенной строки.

В следующем примере строка str инициализируется с помощью функции копирования strcpy () и дополняется подстрокой, используя функцию strcat ():

char str[81];

strcpy(str, "Для продолжения ");

strcat(str, "нажмите клавишу");

Функция strncat() также осуществляет конкатенацию строк, однако, присоединяет лишь указанное в третьем параметре количество символов (беззнаковое целое):

char* strncat(char* strl, const char* str2, size_t num)

Функция возвращает указатель на начало сформированной строки strl. Следующий пример производит конкатенацию строки strl с семью первыми символами подстроки str2:

char strl[90]="Для продолжения ";

char str2[30]="нажмите клавишу";

strncat(strl,str2,7) ;

cout << strl;

В результате будет выведена строка: "Для продолжения нажмите".