Програмиране на C/Стандартна библиотека/string.h

От Уикикниги
Направо към навигацията Направо към търсенето

Заглавния файл <string.h> съдържа функции за обработка на низове (символи тип char) и байтови масиви.

Типове[редактиране]

size_t
Имплементационно-дефиниран беззнаков целочислен тип (най-често unsigned long), който е тип на резултата на оператора sizeof.[1]

Макроси[редактиране]

Функцията setlocale() позволява да запитвате или да задавате текущия регион. Информацията в региона е разделена на категории, които можете да запитвате и настройвате индивидуално. Следните целочислени макроси са определени за обозначаване на тези категории информация:

Макрос Предназначение
NULL Дефинира константен нулев указател.[1]

Вижте също: <localhe.h>

Низови функции[редактиране]

Формат Предназначение
Функции за копиране на низове
void *memcpy(void * restrict s1, const void * restrict s2, size_t n); Копиране на блок памет
void *memccpy(void * restrict s1, const void * restrict s2, int c, size_t n); Копиране на символи от низ
void *memmove(void *s1, const void *s2, size_t n); Преместване на блок памет
char *strcpy(char * restrict s1, const char * restrict s2); Копиране на низ
char *strncpy(char * restrict s1, const char * restrict s2, size_t n); Копиране на символи от низ
Функции за съединяване на низове
char *strcat(char * restrict s1, const char * restrict s2); Свързване на низове
char *strncat(char * restrict s1, const char * restrict s2, size_t n); Добавяне на символи към низ
Функции за сравняване на низове
int memcmp(const void *s1, const void *s2, size_t n); Сравняване на блокове памет
int strcmp(const char *s1, const char *s2); Сравняване на низове
int strcoll(const char *s1, const char *s2); Сравняване на символи на два низа
int strncmp(const char *s1, const char *s2, size_t n); Сравняване на низове, чрез използване на местните културни конвенции
size_t strxfrm(char * restrict s1, const char * restrict s2, size_t n); Преобразуване на низ чрез използване на местните културни конвенции
Функции за търсене в низове
void *memchr(const void *s, int c, size_t n); Търсене на байт в блок памет
char *strchr(const char *s, int c); Търсене на символ в низ
size_t strcspn(const char *s1, const char *s2); Търсене на символи в низ
char *strpbrk(const char *s1, const char *s2); Търсене на символи в низ
char *strrchr(const char *s, int c); Търсене на последното появяване на символ в низ
size_t strspn(const char *s1, const char *s2); Търсене на символ в низ
char *strstr(const char *s1, const char *s2); Търсене на подниз
char *strtok(char * restrict s1, const char * restrict s2); Разделяне на низ на лексеми
Други функции
void *memset(void *s, int c, size_t n); Инициализиране на блок памет
char *strerror(int errnum); Получаване на указател към съобщение за грешка
size_t strlen(const char *s); Определяне дължината на низ
char *strdup(const char *s); Заделя копие на низ
char *strndup(const char *s, size_t size); Заделя копие на низ с определен размер

Макро-функции[редактиране]

C2x § 7.24 String handling <string.h>[2]

За копиране[редактиране]

C2x § 7.24.2 Copying functions[3]

memcpy[редактиране]

C2x § 7.24.2.1 The memcpy function[4]
#include <string.h>
void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
Описание
Функцията memcpy копира n байта от обекта, сочен от s2, в обекта, сочен от s1. Ако обектите се застъпват, поведението е недефинирано.

s1 трябва да е достатъчно голям, за да побере n байта на s2.

Вижте също: memmove

Резултат
Израза от вида memcpy(s1, s2, n) връща като резултат стойността на s1.

memccpy[редактиране]

C2x § 7.24.2.2 The memccpy function[5]
#include <string.h>
void *memccpy(void * restrict s1, const void * restrict s2, int c, size_t n);
Описание
Функцията memcpy копира символи от обекта, сочен от s2, в обекта, сочен от s1. Копирането спира, след като първата поява на символа c (преобразуван до unsigned char) е копирана, или след копирани n на брой символи. Ако се получи застъпване, поведението е недефинирано.

Вижте също: memcpy

Резултат
Израза от вида memccpy(s1, s2, n) връща като резултат указател към низ от копиране на c в s1, или нулев указател, ако c не е открит в първите n на брой символи на s2.

memmove[редактиране]

C2x § 7.24.2.3 The memmove function[6]
#include <string.h>
void *memmove(void *s1, const void *s2, size_t n);
Описание
Функцията memmove копира n байта от обекта, сочен от s2, в обекта, сочен от s1. Байтовете първо се копират във временен буфер, след което се копират в обекта, сочен от s1. Тази особеност позволява обектите да се застъпват в паметта.

Вижте също: memcpy

Резултат
Израза от вида memmove(s1, s2, n) връща като резултат стойността на s1.

strcpy[редактиране]

C2x § 7.24.2.4 The strcpy function[7]
#include <string.h>
char *strcpy(char * restrict s1, const char * restrict s2)
Описание
Функцията strcpy е предназначена за копиране на низ.

При изпълнението на команда от вида strcpy(s1, s2) съдържанието от символния масив s2 се записва в символния масив s1 (включително и нулевия израз). Ако се получи застъпване, поведението е недефинирано.

s1 трябва да е достатъчно голям (големината на буфера, в който се съхраняват символите на низа, сочен от s1, трябва да има големина поне (strlen(s2) + 1) байта, за да се гарантира, че ще може да побере всички символи на низа s2 с нулев символ), за да побере символите на s2.

Вижте също: memcmp, strchr, strcmp и strncmp

Резултат
Израза от вида strcpy(s1, s2) връща като резултат указател към първия елемент в масив s1.

strncpy[редактиране]

C2x § 7.24.2.5 The strncpy function[8]
#include <string.h>
char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
Описание
Функцията strncpy копира n символи от низа s2 в низа s1. Копирането спира, ако са копирани n символи или се достигне нулевия символ на s2. Ако броя на символите в s2 е по-голям от n, то нулев символ не се добавя автоматично към резултатния низ. Ако броя на символите в s2 е по-малък от n, автоматично се добавят нулеви символи докато общия брой на копираните символи стане n. Ако низовете се застъпват, поведението е недефинирано.

s1 трябва да е достатъчно голям (големината на буфера, в който се съхраняват символите на низа, сочен от s1, трябва да има големина поне (n +1) байта, за да се гарантира, че ще може да побере n символа от s2 с нулев символ), за да побере n на брой символи.

Вижте също: memcpy, strrchr, strncat и strncmp

Резултат
Израза от вида memmove(s1, s2, n) връща като резултат стойността на s1.

За сединяване[редактиране]

C2x § 7.24.3 Concatenation functions[9]

strcat[редактиране]

C2x § 7.24.3.1 The strcat function[10]
#include <string.h>
char *strcat(char * restrict s1, const char * restrict s2);
Описание
Функцията strcat е предназначена за изпълнение на обединение (конкатенация) на низове.

При изчисляване на израз от вида strcat(s1, s2) в края на низа, записан в масив s1, се дописва текстовия низ, записан в масив s2. Първия символ на s2 преписва нулевия символ на s1.

s1 трябва да е достатъчно голям (големината на буфера, в който се съхраняват символите на низа, сочен от s1, трябва да има големина поне (strlen(s1) + strlen(s2) + 1) байта, за да се гарантира, че ще може да побере всички символи на низа s2 с нулев символ), за да побере символите на s2. Ако низовете се застъпват, поведението е недефинирано.

Вижте също: strchr, strcmp и strcpy

Резултат
Израза от вида strcat(s1, s2) връща като резултат указател към първия елемент в масив s1.

strncat[редактиране]

C2x § 7.24.3.2 The strncat function[11]
#include <string.h>
char *strncat(char * restrict s1, const char * restrict s2, size_t n);
Описание
Функцията strncat добавя n символа от низа s2 към низа s1. Първият символ на s2 презаписва нулевия символ на s1. Нулев символ автоматично се добавя към резултата.

s1 трябва да е достатъчно голям (големината на буфера, в който се съхраняват символите на низа, сочен от s1 трябва да има големина поне (strlen(str1) + n + 1) байта, за да се гарантира, че ще може да побере n символи от низа s2 с нулев символ), за да побере символите на s2, включително и нулевия символ. Ако низовете се застъпват, поведението е недефинирано.

Вижте също: strcat, strnchr, strcmp и strcpy

Резултат
Израза от вида strncat(s1, s2, n) връща като резултат стойността на s1.

За сравняване[редактиране]

C2x § 7.24.4 Comparison functions[12]

memcmp[редактиране]

C2x § 7.24.4.1 The memcmp function[13]
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
Описание
Функцията memcmp сравнява първите n байта на блоковете памет, сочени от s1 и s2.

Вижте също: memchr, memcpy и strcmp

Резултат
Израза от вида memcmp(s1, s2, n) връща 0
  • ако първите n байта са равни;
  • > 0, ако s1 е по-голям от s2 (байта i {{{1}}} в s1 има по-голяма числова стойност от байта i в s2);
  • < 0 ако s1 е по-малък от s2 (байта i в s1 има по-малка числова стойност от байта i в s2).

strcmp[редактиране]

C2x § 7.24.4.2 The strcmp function[14]
#include <string.h>
int strcmp(const char *s1, const char *s2);
Описание
Функцията strcmp сравнява низовете символ по символ, като се взимат числовите им стойности. Сравняването спира, ако се срещнат различни символи или нулев символ в един от двата низа.

Вижте също: strchr и strcpy

Резултат
Израз от вида strcmp(s1, s2) връща като резултат стойност 0:
  • ако низовете в масивите s1 и s2 са еднакви;
  • > 0, ако s1 е по-голям от s2 (символът s1 има по-голяма числова стойност от символа в s2 или символът в s2 е нулев символ);
  • < 0, ако s1 е по-малък от s2 (символът в s1 има по-малка числова стойност от символа в s2 или символът в s1 е нулев символ).

strcoll[редактиране]

C2x § 7.24.4.3 The strcoll function[15]
#include <string.h>
int strcoll(const char *s1, const char *s2);
Описание
Функцията strcoll сравнява низовете s1 и s2 символ по символ подобно на strcmp(). Разликата е, че strcoll() може да използва категорията LC_COLLATE, за да зададе специфични правила, свързани с местните културни конвенции (виж <locale.h>), за сравняване на низовете.

Вижте също: memcmp и strcmp

Резултат
Израза от вида strcoll(s1, s2) връща като резултат 0:
  • ако низовете са еднакви;
  • > 0, ако s1 е по-голям от s2 (символът в s1 има по-голяма числова стойност от символа в s2 или символа в s2 е нулев символ);
  • < 0, ако s1 е по-малък от s2 (символът в s1 има по-малка числова стойност от символа в s2 или символа в s1 е нулев символ).

strncmp[редактиране]

C2x § 7.24.4.4 The strncmp function[16]
#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n)
Описание
Функцията strncmp сравнява първите n символа на низовете s1 и s2. Символите се сравняват като се взимат числовите им стойности. Сравняването спира ако се срещнат различни символи, нулев символ, символ в един от двата низа или след като се сравнят всичките n символа.

Вижте също: strcmp, strnchr и strncpy

Резултат
Израза от вида strncmp(s1, s2, n) връща като резултат 0:
  • ако всички n символи са еднакви;
  • > 0, ако i{{{1}}} символ в s1 има по-голяма числова стойност от i-я символ в s2 или i-я символ в s2 е нулев символ;
  • < 0 ако i-я символ в s1 е по-малък от i-я символ в s2 или i-я символ в s1 е нулев символ.

strxfrm[редактиране]

C2x § 7.24.4.5 The strxfrm function[17]
#include <string.h>
size_t strxfrm(char * restrict s1, const char * restrict s2, size_t n);
Описание
Функцията strxfrm трансформира низа s2 и записва резултата в низа s1. Параметърът n определя максималния брой символи (включително нулевия символ), които функцията може да запише в s1. Ако s1 и s2 се застъпват, поведението е недефинирано.

Видът на трансформацията зависи от стойността на категорията LC_COLLATE и е такава, че ако функцията strcmp() се приложи към два трансформирани с strxfrm() низа, резултатът е 0, > 0 или < 0 и отговаря на резултата от strcoll(), приложена върху същите два първоначални низа преди да бъдат трансформирани с strxfrm(). Аргументът на параметъра s1 може да бъде нулев указател, ако параметърът n е 0.

Вижте също: #strcoll

Резултат
Израз от вид strxfrm(s1, s2, n) връща като резултат дължината на трансформирания низ (нулевият символ не е включен). Ако върнатата стойност е по-голяма или равна на n, съдържанието на s1 е неопределено.

За търсене[редактиране]

C2x § 7.24.5 Search functions[18]

memchr[редактиране]

C2x § 7.24.5.1 The memchr function[19]
#include <string.h>
void *memchr(const void *s, int c, size_t n);
Описание
Функцията memchr търси за първата поява на символа c (преобразуван до unsigned char) в първите n на брой символи (всеки интерпретиран като unsigned char) в низа s.

Вижте също: memcpy и isspace

Резултат
Израза от вида memchr(s, c, n) връща като резултат указател към намерения символ, в противен случай връща нулев указател.

strchr[редактиране]

C2x § 7.24.5.2 The strchr function[20]
#include <string.h>
char *strchr(const char *s, int c);
Описание
Функцията strchr търси символ в низ.

Като първи аргумент на функцията се предава текстов низ, а като втори – символ.

Вижте също: strpbrk, strspn, strstr и strtok

Резултат
Израза strcspn(s1, s2) връща като резултат указател към елемент в масива, съдържащ търсения символ. Ако има няколко такива елементи, се връща указател към първия от тях. Ако символът не бъде открит, връща се нулев указател.

strcspn[редактиране]

C2x § 7.24.5.3 The strcspn function[21]
#include <string.h>
size_t strcspn(const char *s1, const char *s2);
Описание
Функцията strcspn намира първия символ от низа s1, който съвпада с някой от символите в низа s2.
Резултат
Израза от вида strcspn(s1, s2) връща като резултат индекса на намерения в s1 символ. Ако низовете нямат общи символи, strcspn() връща броя на символите в s1.

Вижте също: strrchr, strpbrk, strstr и strtok

strpbrk[редактиране]

C2x § 7.24.5.4 The strpbrk function[22]
#include <string.h>
char *strpbrk(const char *s1, const char *s2);
Описание
Функцията strpbrk намира първия символ от низа s1, който съвпада с някой от символите в низа s2.

Вижте също: strspn, strchr, strstr и strtok

Резултат
Израза от вида strbrk(s1, s2) връща указател към намерения в s1 символ. Ако низовете нямат общи символи, strbrk() връща нулев указател.

strrchr[редактиране]

C2x § 7.24.5.5 The strrchr function[23]
#include <string.h>
char *strrchr(const char *s, int c);
Описание
Функцията strrchr търси за последната поява на символа c (преобразуван до unsigned char) в низа s. Нулевия символ също се разглежда като част от низа.

Вижте също: strpbrk, strspn, strstr и strtok

Резултат
Израза от вида strchr(s, c) връща като резултат указател към намерения символ, в противен случай връща нулев указател.

strspn[редактиране]

C2x § 7.24.5.6 The strspn function[24]
#include <string.h>
size_t strspn(const char *s1, const char *s2);
Описание
Функцията strrchr намира първия символ от низа s1, който не съвпада с никой от символите в низа s2.

Вижте също: strpbrk, strchr, strstr и strtok

Резултат
Израза от вида strspn(s1, s2) връща като резултат индекса на намерения в s1 символ. Ако всички символи на s1 се съдържат в s2, strspn() връща броя на символите в s1.

strstr[редактиране]

C2x § 7.24.5.7 The strstr function[25]
#include <string.h>
char *strstr(const char *s1, const char *s2);
Описание
Функцията strstr търси подниз в низ. Нулевият символ на s2 не се взима под внимание.

Вижте също: strchr, strcspn, strpbrk, strtok и strrchr

Резултат
Израза от вида strstr(s1, s2) връща като резултат указател към елемента, от който подниз s2 се съдържа в низ s1. Ако низ s1 не съдържа подниз s2, функцията връща нулев указател. Ако s2 е нулев низ, strstr() връща s1.

strtok[редактиране]

C2x § 7.24.5.8 The strtok function[26]
#include <string.h>
char *strtok(char * restrict s1, const char * restrict s2);
Описание
Функцията strtok разбива низа s1 на лексеми. Разделителите между лексемите се указват с низа s2. При всяко извикване strtok връща указател към лексема или нулев указател ако низа не съдържа лексеми. Процесът на разбиване на лексеми се извършва по следния начин:
  • 1. При първото извикване, на функцията се подава низа, който ще се разбива на лексеми. В низа s2 се указват символите, които да се използват за разделители.
  • 2. При всяко последващо извикване, на функцията се подава NULL. Разделителите в s2 могат да се сменят за всяко извиквана на strtok().
  • 3. Точка 2 се повтаря докато strtok() върне нулев указател.

Вижте също: strchr, strcspn, strpbrk, strrchr и strspn

Резултат
Първото извикване на strtok() търси за първия символ в s1, който не е разделител. Ако няма такъв символ (s1 се състои само от разделители, указани в s2), това означава, че низа s1 не съдържа лексеми и strtok() връща нулев указател. Ако се намери такъв символ, той се маркира като начало на лексема и функцията продължава да търси за следващия разделител. Ако няма друг разделител, целия низ представлява една лексема и strtok() връща указател към нея, а последващо извикване на strtok() ще върне нулев указател. Ако се намери следващ разделител, той се заменя с нулев символ, с което се маркира края на лексемата и strtok() връща указател към началото и. Функцията strtok() съхранява вътрешно указател към следващия символ, който се намира след намерения разделител. При последващо извикване на strtok() с нулев указател за първи параметър, процесът ще продължи от този символ. Разбиването на низа s1 на лексеми ще приключи, когато поредното извикване на strtok() с нулев указател върне нулев указател.

Други[редактиране]

C2x § 7.24.6 Miscellaneous functions[27]

memset[редактиране]

C2x § 7.24.6.1 The memset function[28]
#include <string.h>
void *memset(void *s, int c, size_t n);
Описание
Функцията memset копира стойността на параметъра c (преобразувана до unsigned char) в първите n на брой байта на блок паметта, сочена от s.

Вижте също: memcmp, memcpy и memmove

Резултат
Израза от вида memset(s, c, n) връща като резултат стойността на s.

strerror[редактиране]

C2x § 7.24.6.2 The strerror function[29]
#include <string.h>
char *strerror(int errnum);
Описание
Функцията strerror е предназначена за получаване на указател към съобщение за грешка.

Вижте също: perror и errno

Резултат
Израза от вида strerror(errnum) връща като резултат стойността указател към низ, представляващ съобщение за грешка. Номерът на съобщението се задава с errnum, който идва от errno. Конкретните съобщения за грешка са имплементационно-зависими и не трябва да се променят от програмата.

strlen[редактиране]

C2x § 7.24.6.3 The strlen function[30]
#include <string.h>
size_t strlen(const char *s);
Описание
Функцията strlen изчислява дължината на C–символен низ, предадена като аргумент на функцията.

Вижте също: memcpy, strchr, strcmp и strncmp

Резултат
Израза от вида strlen(s) връща като резултат броя на символите на низа s. Нулевият символ не се отчита.

strdup[редактиране]

C2x § 7.24.6.4 The strdup function[31]
#include <string.h>
char *strdup(const char *s);
Описание

Вижте също: strndup

Резултат

strndup[редактиране]

C2x § 7.24.6.5 The strndup function[32]
#include <string.h>
char *strndup(const char *s, size_t size);
Описание

Вижте също: strdup

Резултат

Бележки[редактиране]

  1. 1,0 1,1 Script error: The module returned a nil value. It is supposed to return an export table.. ISO/IEC. с. 260, § 7.19 Common definitions <stddef.h>.
  2. "ISO/IEC 9899:202x" с. 318 § 7.24 String handling <string.h>
  3. "ISO/IEC 9899:202x" с. 318 § 7.24.2 Copying functions
  4. "ISO/IEC 9899:202x" с. 318 § 7.24.2.1 The memcpy function
  5. "ISO/IEC 9899:202x" с. 318 § 7.24.2.2 The memccpy function
  6. "ISO/IEC 9899:202x" с. 318 § 7.24.2.3 The memmove function
  7. "ISO/IEC 9899:202x" с. 319 § 7.24.2.4 The strcpy function
  8. "ISO/IEC 9899:202x" с. 319 § 7.24.2.5 The strncpy function
  9. "ISO/IEC 9899:202x" с. 319 § 7.24.3 Concatenation functions
  10. "ISO/IEC 9899:202x" с. 319 § 7.24.3.1 The strcat function
  11. "ISO/IEC 9899:202x" с. 320 § 7.24.3.2 The strncat function
  12. "ISO/IEC 9899:202x" с. 320 § 7.24.4 Comparison functions
  13. "ISO/IEC 9899:202x" с. 320 § 7.24.4.1 The memcmp function
  14. "ISO/IEC 9899:202x" с. 320 § 7.24.4.2 The strcmp function
  15. "ISO/IEC 9899:202x" с. 320 § 7.24.4.3 The strcoll function
  16. "ISO/IEC 9899:202x" с. 320 § 7.24.4.4 The strncmp function
  17. "ISO/IEC 9899:202x" с. 321 § 7.24.4.5 The strxfrm function
  18. "ISO/IEC 9899:202x" с. 321 § 7.24.5 Search functions
  19. "ISO/IEC 9899:202x" с. 321 § 7.24.5.1 The memchr function
  20. "ISO/IEC 9899:202x" с. 322 § 7.24.5.2 The strchr function
  21. "ISO/IEC 9899:202x" с. 322 § 7.24.5.3 The strcspn function
  22. "ISO/IEC 9899:202x" с. 322 § 7.24.5.4 The strpbrk function
  23. "ISO/IEC 9899:202x" с. 322 § 7.24.5.5 The strrchr function
  24. "ISO/IEC 9899:202x" с. 323 § 7.24.5.6 The strspn function
  25. "ISO/IEC 9899:202x" с. 323 § 7.24.5.7 The strstr function
  26. "ISO/IEC 9899:202x" с. 323 § 7.24.5.8 The strtok function
  27. "ISO/IEC 9899:202x" с. 324 § 7.24.6 Miscellaneous functions
  28. "ISO/IEC 9899:202x" с. 324 § 7.24.6.1 The memset function
  29. Script error: The module returned a nil value. It is supposed to return an export table.. ISO/IEC. p. 324, § 7.24.6.2 The strerror function. (на английски)
  30. "ISO/IEC 9899:202x" с. 325 § 7.24.6.3 The strlen function
  31. "ISO/IEC 9899:202x" с. 325 § 7.24.6.4 The strdup function
  32. "ISO/IEC 9899:202x" с. 325 § 7.24.6.5 The strndup function