<string.h> est l'en-tête de la bibliothèque standard du langage C qui contient les définitions des macros, des constantes et les déclarations de fonctions et de types utilisés non seulement pour la manipulation de chaînes de caractères, mais aussi pour diverses fonctions de manipulations de la mémoire.

Les fonctions déclarées dans string.h sont extrêmement utiles, puisqu'en tant que part de la bibliothèque standard C, il est certain qu'elles fonctionnent sur toute plate-forme qui supporte le langage C. Malgré tout, quelques problèmes de sécurité existent avec ces fonctions, comme des débordements de tampon, ce qui mène les programmeurs à préférer des solutions plus sûres, mais peut-être moins portables. De plus, ces fonctions ne sont compatibles qu'avec l'ASCII ou des codages semblables comme l'ISO-8859-1 ; les codages de caractères multibyte, tels qu'UTF-8, posent le problème que la « longueur » des chaînes est interprétée comme un nombre d'octets, plutôt que comme un nombre de caractères Unicode. La manipulation des chaînes de type non-ASCII est généralement réalisée à travers wchar.h.

Constantes et types modifier

Nom Notes
NULL macro exprimant le pointeur nul, cette constante représente la valeur du pointeur pour laquelle on est sûr qu'elle ne désigne ni une adresse valide, ni un objet en mémoire
size_t un entier non signé qui correspond au résultat de l'opérateur sizeof

Fonctions modifier

Nom Notes
void *memcpy(void *dest, const void *src, size_t n); copie n octets entre deux zones mémoire, qui ne doivent pas se superposer
void *memmove(void *dest, const void *src, size_t n); copie n octets entre deux zones mémoire ; à la différence de memcpy, les zones mémoire peuvent se superposer
void *memchr(const void *s, int c, size_t n); retourne en pointeur la première occurrence c parmi les n premiers octets de s, ou NULL si c n'est pas trouvé
int memcmp(const void *s1, const void *s2, size_t n); compare les n premiers caractères de deux zones mémoire
void *memset(void *, int, size_t); remplit une zone mémoire de la répétition d'un caractère
char *strcat(char *dest, const char *src); concatène la chaîne src à la suite de dest
char *strncat(char * dest, const char * src, size_t n); concatène au plus n caractères de la chaîne src à la suite de dest
char *strchr(const char *, int); cherche un caractère dans une chaîne et renvoie un pointeur sur le caractère, en cherchant depuis le début
char *strrchr(const char *, int); idem que strchr, recherche à partir de la fin
int strcmp(const char *, const char *); compare deux chaînes lexicalement
int strncmp(const char *, const char *, size_t n); compare les n premiers octets au plus de deux chaînes en utilisant l'ordre lexicographique
int strcoll(const char *, const char *); compare deux chaînes en utilisant l'ordre lexicographique
char *strcpy(char *toHere, const char *fromHere); copie une chaîne de caractères d'une zone à une autre
char *strncpy(char *toHere, const char *fromHere, size_t n); copie au plus n caractères d'une chaîne d'une zone à une autre
char *strerror(int); retourne la chaîne de caractères correspondant à un numéro d'erreur
size_t strlen(const char *); retourne la longueur d'une chaîne caractères
size_t strspn(const char *s, const char *accept); détermine la taille de la sous-chaîne initiale maximale de s ne contenant que des caractères présents dans accept
size_t strcspn(const char *s, const char *reject); détermine la taille de la sous-chaîne initiale maximale de s ne contenant pas de caractères de reject
char *strpbrk(const char *s, const char *accept); trouve la première occurrence d'un caractère d'accept dans s
char *strstr(const char *haystack, const char *needle); trouve la première occurrence de la chaîne needle dans la chaîne haystack
char *strtok(char *, const char *); scinde une chaîne en éléments lexicaux. Note: la fonction modifie la chaîne passée en paramètre.
size_t strxfrm(char *dest, const char *src, size_t n); transforme src de façon que le tri par ordre lexicographique de la chaîne transformée soit équivalent au tri par ordre lexicographique de src.

Extensions à ISO C modifier

Nom Notes Spécification
char *strdup(const char *); alloue et duplique une chaîne en mémoire POSIX ; une extension de BSD au départ
errno_t strcpy_s(char *restrict s1, rsize_t s1max, const char *restrict s2); variante de strcpy qui vérifie les tailles en mémoire ISO/IEC WDTR 24731
void *mempcpy(void *dest, const void *src, size_t n); variante de memcpy donnant un pointeur sur l'octet suivant le dernier écrit GNU
void *memccpy(void *dest, const void *src, int c, size_t n); copie au plus n octets entre deux zones mémoire, qui ne doivent pas se superposer, en s'arrêtant quand le caractère c est trouvé UNIX 98?
int strerror_r(int, char *, size_t); retourne la représentation en chaîne d'un code d'erreur dans un tampon spécifié par l'utilisateur (version de strerror() compatible avec les threads). La version GNU retourne un pointeur vers la chaîne représentant l'erreur. XSI, POSIX
size_t strlcpy(char *dest, const char *src, size_t n); variante de strcpy qui vérifie la taille des zones allouées à l'origine OpenBSD, également FreeBSD, Solaris, Mac OS X
char *strtok_r(char *, const char *, char **); version de strtok compatible avec les threads POSIX
char *strsignal(int sig); tout comme strerror, renvoie une description textuelles d'un signal (fonctionnement non garanti avec les threads) BSDs, Solaris, Linux

Liens internes modifier