Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Конкатенация строк



Конкатенация двух строк означает их сцепление, при этом создается новая, более длинная строка. При объявлении строки

char original[l28] = "Проверка";

оператор

strcat(original, "один, два, три!");

превратит первоначальную строку original в "Проверка один, два, три!"

При вызове функции strcat() убедитесь, что первый аргумент типа char* инициализирован и имеет доста­точно места, чтобы запомнить результат. Если с1 адресует строку, которая уже заполнена, а с2 адресует нену­левую строку, оператор

strcat(c1, с2); /*??? */

перезапишет конец строки, вызвав серьезную ошибку.

Функция strcat() возвращает адрес результирующей строки (совпадающий с ее первым параметром) и мо­жет использоваться как каскад нескольких вызовов функций:

strcat(strcat(c1, с2), сЗ);

Этот оператор добавит строку, адресуемую с2, и строку, адресуемую сЗ, к строке, адресуемой с1, что экви­валентно двум отдельным операторам:

strcat(c1, с2);

strcat(c1, сЗ);

Листинг 6.7 показывает, как использовать функцию strcat() для решения типичной проблемы - по­лучения полного имени из первого, среднего и последнего имени(запомненных отдельно, например в виде строк в базе данных). Скомпилируйте CONCAT аналогично тому, как вы это делали для программы PASSWORD. В IDE откройте файл проекта PASSWORD.IDE с помощью команды Project\0pen project... За­тем нажмите <Ctrl+F9>. В DOS введите команду bcc concat.c gets.с. Или, если вы уже скомпилировали мо­дуль GETS с получением объектного файла GETS.OBJ, введите команду bcc concat.c gets.obj.

Введите первое, среднее и последнее имена. Программа сцепит введенные вами строки и отобразит имя как, отдельную строку.

Листинг 6.7. CONCAT.C (конкатенация строк)

1: #include <stdio.h>

2: #include <stdlib.h>

3: #include <conio.h>

4: #include <string.h>

5: #include <alloc.h>

6: #include "gets.h"

7:

8: char *PromptFor(char *prompt);

9:

10: main()

11: {

12: char *firstName;

13: char *middleName;

14: char *lastName;

15: char fullName[128];

16:

17: clrscr();

18: firstName = PromptFor("first name");

19: middleName = ProniptFor("middle name");

20: lastName = PromptFor("last name");

21: strcpy(fullName, firstName);

22: strcat(fullName, " ");

23: strcat(fullName, middleName);

24: strcat(fullName, " ");

25: strcat(fullName, lastName);

26: gotoxy(1,20);

27: printf(“Your name is: %s", fullName);

28: free(firstName); /* Освобождает выделенную для строки память */

29: free(middleName); /* " " " " " " */

30: free(lastName); /* " " " " " " */

31: gotoxy(1, 24);

32: return 0;

33: }

34:

35: char *PromptFor(char *prompt)

36: {

37: char temp; /*Временный строковый указатель */

38:

39: gotoxy(1,wherey() +1);

40: printf(“Enter your %s: ", prompt);

41: temp = GetStringAt(wherex(), wherey(),40);

42: if (!temp) {

43: gotoxy(1, wherey());

44: clreol();

45: puts("Error: Out-of memory");

46: exit(1);

47: }

48: return temp;

49: }

Строки 21—25 демонстрируют важный принцип конкатенации строк: всегда инициализируйте первый стро­ковый аргумент. В данном случае символьный массив fullName инициализируется вызовом функции strcpy(), которая вставляет firstName в fullName. После этого программа добавляет пробелы и две другие строки - middleName и lastName. Никогда не вызывайте функцию strcat() с неинициализированным первым аргумен­том. Например, если бы в строке 21 было записано:

strcat(fullName, firstName); /*??? */

программа добавила бы firstName к непредсказуемому содержимому неинициализированной строки fullName. Это серьезная и распространенная ошибка, которой легко избежать, если всегда инициализировать аргумент результата функции strcat().

Если вы не уверены в том, что в строке достаточно места для присоединяемых подстрок, вызовите функ­цию strncat(), которая аналогична функции strcat(), но требует числового аргумента, определяющего число копируемых символов. Для строк s1 и s2, которые могут быть либо указателями типа char *, либо символьны­ми массивами, оператор

strncat(s1, s2, 4);

присоединяет максимум четыре символа из s2 в конец строки s1. Результат обязательно завершается нуле­вым символом.

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

#define MAXLEN 128

char s1[MAXLEN] = "Кот";

char s2[] = "в шляпе";

Вы можете присоединить s2 к s1, формируя строку "Кот в шляпе", с помощью функции strcat():

strcat(s1, s2);

Если вы не уверены, что в s1 достаточно места, чтобы запомнить результат, используйте альтернативный оператор:

strncat(s1, s2, (MAXLEN - 1) - strlen(s1));

Этот способ гарантирует, что s1 не переполнится, даже если s2 нужно будет урезать до подходящего разме­ра. Этот оператор прекрасно работает, если s1 - нулевая строка.





Дата публикования: 2015-01-23; Прочитано: 383 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...