Конкатенація рядків.
Функція strcpy( ).
Копіювання рядків.
Визначення довжини рядка.
Кожен рядок на мові С визначається наступним чином – це є послідовність символів, початок якої вказує символьний вказівник, а кінеці помічений нульовим символом.
В ході програм дуже часто виникає необхідність визначити довжину рядка, тобто порахувати кількість символів в ньому.
Цю довжину можна отримати за допомогою стандартної функції strlen().
Функція описана в заголовку <string.h> та має наступний вигляд:
strlen (рядок);
в якості аргументу функція приймає вказівник на рядок, або сам рядок, а повертає значення типу size_t. В заголовочному файлі <string.h> цей тип перевизначений з unsigned, так що фактично функція повертає число без знаку.
Варто відзначити, що тип size_t часто використовується при роботи з рядками, тому просто слід запамятати, що size_t є аналогом unsigned.
В мові С існує декілька функцій копіювання рядків. Через специфічну техніку роботи з рядками не можна просто привласнити один рядок іншому.
Весь процес відбувається наступним чином: вихідний рядок копіюється з того місця в памяті, що було йому виділено при оголошенні і заноситься в інше, яке також повинне бути зарезервовано, чи то шляхом оголошення, чи то через програмне виділення памяті.
Дана бібліотечна функція копіює цілий рядок до завданого місця в памяті.
strcpy (destination, source);
Як видно, функція має два аргументи – місце призначення, тобто КУДИ буде скопійовано рядок, та вихідний рядок, тобто місце в памяті ЗВІДКИ він буде скопійований.
При виклику цієї функції необхідно виділити пам'ять для нового рядка. Це повязано з тим, що функція не перевіряє, чи достатньо місця за вказаною адресою. Якщо пам'ять для рядка-копії не була спеціально виділена, то функція затре новою інформацією strlen(source) комірок памяті, починаючи з адреси destination. Зрозуміло, що наслідки можуть бути непередбачені.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char source [ ] = “Вихідний рядок”;
int main ()
{
char dest1 [80];
char *dest2;
printf (“%s”, source);
strcpy (dest1, source);
printf (“Скопійований рядок %s”, dest1);
dest2 = malloc (srtlen (source)+1);
strcpy (dest2, source);
printf (“Рядок скопійований в інше місце %s”, dest2);
return (0);
}
Конкатенація рядків означає зчеплення, тобто один рядок прєднується до кінця іншого.
В стандартній бібліотеці <string.h> для цього передбачена функція strcat().
strcat (str1, str2);
Зрозуміло, що функція має два аргументи - str2 (рядок копія якого буде причеплена до str1). Результатом роботи функції буде перший рядок.
Аналогічно, приймаючий рядок повинен бути достатньо довгим, щоб вмістити в себе копію другого.