Bibliothèque standard C -<string.h>
Introduction
string .hLe fichier d'en-tête définit un type de variable, une macro et diverses fonctions pour manipuler des tableaux de caractères.
<string.h>Est un fichier d'en-tête de la bibliothèque standard C, fournissant un ensemble de fonctions pour traiter les chaînes de caractères et les blocs de mémoire. Ces fonctions couvrent la copie, la concaténation, la comparaison, la recherche de chaînes et les opérations de mémoire, etc.
Variables de la bibliothèque
Voici le type de variable défini dans le fichier d'en-tête string.h :
| Numéro de série | Variables et description |
|---|---|
| 1 | size_t Il s'agit d'un type entier non signé, qui estsizeofle résultat du mot-clé. |
Macros de bibliothèque
Voici les macros définies dans le fichier d'en-tête string.h :
| Numéro de série | Macros & Description |
|---|---|
| 1 | NULL Cette macro est la valeur d'une constante de pointeur nul. |
Fonctions de bibliothèque
Voici les fonctions définies dans le fichier d'en-tête string.h :
| Numéro de série | Fonctions et description |
|---|---|
| 1 | void *memchr(const void *str, int c, size_t n) Dans le paramètrestrRecherche la première occurrence du caractère c (un caractère non signé) dans les n premiers octets de la chaîne pointée. |
| 2 | int memcmp(const void *str1, const void *str2, size_t n) contientstr1etstr2Compare les n premiers octets. |
| 3 | void *memcpy(void *dest, const void *src, size_t n) Copie n caractères de src versdest。 |
| 4 | void *memmove(void *dest, const void *src, size_t n) un autre utilisé pour copier depuissrccopier n caractères versdestde la fonction. |
| 5 | void *memset(void *str, int c, size_t n) Copie la valeur spécifiée c dans les n premiers octets de la zone mémoire pointée par str. |
| 6 | char *strcat(char *dest, const char *src) contientsrcAjoute la chaîne pointée pardestÀ la fin de la chaîne pointée par |
| 7 | char *strncat(char *dest, const char *src, size_t n) holdsrcAjoute la chaîne pointée pardestà la fin de la chaîne vers laquelle il pointe, jusqu'à une longueur de n caractères. |
| 8 | char *strchr(const char *str, int c) Dans le paramètrestrRecherche la première occurrence du caractère c (un caractère non signé) dans la chaîne pointée. |
| 9 | int strcmp(const char *str1, const char *str2) contientstr1La chaîne pointée parstr2se compare à la chaîne pointée par |
| 10 | int strncmp(const char *str1, const char *str2, size_t n) contiennentstr1etstr2pour comparaison, en comparant au plus les n premiers octets. |
| 11 | int strcoll(const char *str1, const char *str2) contiennentstr1etstr2Compare, et le résultat dépend du paramètre de locale LC_COLLATE. |
| 12 | char *strcpy(char *dest, const char *src) contenirsrcla chaîne pointée par est copiée dansdest。 |
| 13 | char *strncpy(char *dest, const char *src, size_t n) contientsrcla chaîne pointée par est copiée versdest, en copiant au plus n caractères. |
| 14 | size_t strcspn(const char *str1, const char *str2) Compte combien de caractères consécutifs au début de la chaîne str1 ne contiennent aucun des caractères de la chaîne str2. |
| 15 | char *strerror(int errnum) Recherche dans le tableau interne le numéro d'erreur errnum et renvoie un pointeur vers la chaîne de message d'erreur. |
| 16 | size_t strlen(const char *str) Calcule la longueur de la chaîne str, jusqu'à mais sans inclure le caractère nul de terminaison. |
| 17 | char *strpbrk(const char *str1, const char *str2) Rechercher la chaînestr1La première chaîne correspondante dansstr2un caractère parmi les caractères, sans inclure le caractère nul de terminaison. C'est-à-dire qu'il examine les caractères de la chaîne str1 un par un ; lorsqu'un caractère testé se trouve aussi dans la chaîne str2, il s'arrête et renvoie la position de ce caractère. |
| 18 | char *strrchr(const char *str, int c) Dans le paramètrestrRecherche la dernière occurrence du caractère c (un caractère non signé) dans la chaîne pointée. |
| 19 | size_t strspn(const char *str1, const char *str2) Chaîne de recherchestr1Le premier caractère de ... qui ne se trouve pas dans la chaînestr2L'indice du caractère apparaissant dans |
| 20 | char *strstr(const char *haystack, const char *needle) Dans la chaînehaystackTrouve la première occurrence de la chaîneneedle(sans inclure le caractère nul de terminaison). |
| 21 | char *strtok(char *str, const char *delim) Divise la chaînestren un ensemble de chaînes,delimcomme délimiteur. |
| 22 | size_t strxfrm(char *dest, const char *src, size_t n) Convertit la chaîne selon la catégorie LC_COLLATE de la locale actuelle du programme.srcles premiersncaractères, et les place dans la chaînedestDans. |
Exemple
Ce qui suit utilise<string.h>Exemples de quelques fonctions dans
Copie de chaînes :
Exemple
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
strcpy(dest, src);
printf("Chaîne copiée : %s\n", dest);
return 0;
}
Concaténation de chaînes :
Exemple
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[] = ", World!";
strcat(str1, str2);
printf("Chaîne concaténée : %s\n", str1);
return 0;
}
Comparaison de chaînes :
Exemple
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Les chaînes sont égales\n");
} else {
printf("Les chaînes ne sont pas égales\n");
}
return 0;
}
Trouve la première occurrence d'un caractère dans une chaîne :
Exemple
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *ptr = strchr(str, 'o');
if (ptr != NULL) {
printf("Première occurrence de 'o' trouvée à la position : %ld\n", ptr - str);
} else {
printf("Caractère introuvable\n");
}
return 0;
}
Copie de blocs de mémoire :
Exemple
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
memcpy(dest, src, strlen(src) + 1);
printf("Mémoire copiée : %s\n", dest);
return 0;
}
Notes
- Lors de l'utilisation de fonctions de chaîne, assurez-vous que le tampon de destination dispose de suffisamment d'espace pour stocker le résultat afin d'éviter un débordement de tampon.
strncpyetstrncatPermet de spécifier le nombre maximal de caractères à copier ou à concaténer, ce qui aide à prévenir les débordements de tampon.strtokLa fonction n'est pas sûre pour les threads, car elle utilise en interne des variables statiques pour sauvegarder le contexte. Si elle est utilisée dans un environnement multithread, vous devez utiliserstrtok_rfonction.- Utilisation
memcpylorsque ... les zones de mémoire source et destination ne doivent pas se chevaucher. Si un chevauchement peut se produire, vous devez utilisermemmove。
En comprenant et en utilisant<string.h>Les fonctions fournies permettent des opérations pratiques sur les chaînes et la mémoire, ce qui permet des programmes C plus efficaces et plus fiables.