Usa la funzione strdup in C
-
Usa la funzione
strdup
per duplicare la stringa data in C -
Usa la funzione
strndup
per duplicare la stringa data in C -
Usa la funzione
strdupa
per duplicare la stringa data in C
![Usa la funzione strdup in C](/img/C/feature-image---strdup-in-c.webp)
Questo articolo spiegherà diversi metodi su come utilizzare la funzione strdup
in C.
Usa la funzione strdup
per duplicare la stringa data in C
strdup
è una delle funzioni compatibili con POSIX disponibile sulla maggior parte dei sistemi operativi basati su UNIX. Implementa la funzionalità di copia delle stringhe ma esegue l’allocazione e il controllo della memoria internamente. Sebbene un utente sia responsabile della liberazione del puntatore restituito a char
poiché strdup
alloca la memoria con la chiamata alla funzione malloc
.
strdup
accetta un singolo argomento: la stringa sorgente da duplicare e restituisce il puntatore a una stringa appena copiata. La funzione restituisce NULL
in caso di errore, ovvero quando c’è una memoria insufficiente da allocare. In questo caso, stiamo recuperando la variabile d’ambiente HOME
usando la funzione getenv
e copiando il suo valore con 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);
}
Produzione:
/home/user
Usa la funzione strndup
per duplicare la stringa data in C
strndup
è una funzione simile che richiede un argomento aggiuntivo per specificare il numero di byte che devono essere copiati al massimo. Questa versione è utile per copiare solo alcune parti della stringa. Nota però, strndup
aggiunge un byte nullo di terminazione ai caratteri copiati, assicurando così che sia memorizzato come formato stringa in stile C e possa essere manipolato come tale.
#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);
}
Produzione:
/home
Usa la funzione strdupa
per duplicare la stringa data in C
strdupa
fa parte della libreria GNU C e potrebbe non essere disponibile in altri compilatori C. strdupa
è simile alla funzione strdup
tranne per il fatto che usa alloca
per l’allocazione della memoria. La funzione alloca
implementa l’allocazione della memoria nella regione dello stack e l’area viene liberata automaticamente quando ritorna la funzione chiamante. Pertanto, il puntatore restituito da strdupa
non dovrebbe essere liberato esplicitamente con la chiamata a free
poiché risulterà in un errore di segmentazione. Nota che la macro _GNU_SOURCE
dovrebbe essere definita per compilare il codice con successo.
#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);
}
Produzione:
/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