Utilisez la fonction strdup en C
-
Utilisez la fonction
strdup
pour dupliquer la chaîne donnée en C -
Utilisez la fonction
strndup
pour dupliquer la chaîne donnée en C -
Utilisez la fonction
strdupa
pour dupliquer la chaîne donnée en C
Cet article explique plusieurs méthodes d’utilisation de la fonction strdup
en C.
Utilisez la fonction strdup
pour dupliquer la chaîne donnée en C
strdup
est l’une des fonctions compatibles POSIX disponibles sur la plupart des systèmes d’exploitation UNIX. Il implémente la fonctionnalité de copie de chaînes mais fait l’allocation de mémoire et la vérification en interne. Bien qu’un utilisateur soit responsable de la libération du pointeur char
retourné, car strdup
alloue la mémoire avec l’appel de fonction malloc
.
strdup
prend un seul argument - la chaîne source à dupliquer et renvoie le pointeur vers une chaîne nouvellement copiée. La fonction renvoie NULL
en cas d’échec, c’est-à-dire lorsqu’il n’y a pas suffisamment de mémoire à allouer. Dans ce cas, nous récupérons la variable d’environnement HOME
en utilisant la fonction getenv
et copions sa valeur avec strdup
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *path = NULL;
const char *temp = getenv("HOME");
if (temp != NULL) {
path = strdup(temp);
if (path == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
} else {
fprintf(stderr, "$HOME environment variable is not defined\n");
exit(EXIT_FAILURE);
}
printf("%s\n", path);
free(path);
exit(EXIT_SUCCESS);
}
Production:
/home/user
Utilisez la fonction strndup
pour dupliquer la chaîne donnée en C
strndup
est une fonction similaire qui prend un argument supplémentaire pour spécifier le nombre d’octets qui doivent être copiés au maximum. Cette version est utile pour copier uniquement certaines parties de la chaîne. Notez cependant que strndup
ajoute l’octet nul de fin aux caractères copiés, garantissant ainsi qu’il est stocké au format de chaîne de style C et peut être manipulé en tant que tel.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *path = NULL;
const char *temp = getenv("HOME");
if (temp != NULL) {
path = strndup(temp, 5);
if (path == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
} else {
fprintf(stderr, "$HOME environment variable is not defined\n");
exit(EXIT_FAILURE);
}
printf("%s\n", path);
free(path);
exit(EXIT_SUCCESS);
}
Production:
/home
Utilisez la fonction strdupa
pour dupliquer la chaîne donnée en C
strdupa
fait partie de la bibliothèque GNU C et peut ne pas être disponible dans d’autres compilateurs C. strdupa
est similaire à la fonction strdup
sauf qu’elle utilise alloca
pour l’allocation de mémoire. La fonction alloca
implémente l’allocation de mémoire sur la région de la pile, et la zone est libérée automatiquement lorsque la fonction appelante revient. Ainsi, le pointeur renvoyé par strdupa
ne doit pas être libéré explicitement avec l’appel free
car cela entraînera une erreur de segmentation. Notez que la macro _GNU_SOURCE
doit être définie pour compiler le code avec succès.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *path = NULL;
const char *temp = getenv("HOME");
if (temp != NULL) {
path = strdupa(temp);
if (path == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
} else {
fprintf(stderr, "$HOME environment variable is not defined\n");
exit(EXIT_FAILURE);
}
printf("%s\n", path);
exit(EXIT_SUCCESS);
}
Production:
/home/user
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook