Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Конкатенация двух строк означает их сцепление, при этом создается новая, более длинная строка. При объявлении строки
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!