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

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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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
Articolo correlato - C String
- Array di stringhe in C
- Concatena String e Int in C
- Confronta le stringhe in C
- Controlla se la stringa contiene una sottostringa in C
- Converti stringa in minuscolo in C
- Converti un intero in una stringa in C