Конкатенація рядків.

Функція 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). Результатом роботи функції буде перший рядок.

Аналогічно, приймаючий рядок повинен бути достатньо довгим, щоб вмістити в себе копію другого.