Utilice la función strdup en C
-
Utilice la función
strdup
para duplicar la cadena dada en C -
Utilice la función
strndup
para duplicar la cadena dada en C -
Utilice la función
strdupa
para duplicar la cadena dada en C
Este artículo explicará varios métodos de cómo utilizar la función strdup
en C.
Utilice la función strdup
para duplicar la cadena dada en C
strdup
es una de las funciones compatibles con POSIX que está disponible en la mayoría de los sistemas operativos basados en UNIX. Implementa la funcionalidad de copia de cadenas, pero realiza la asignación de memoria y la verificación internamente. Aunque un usuario es responsable de liberar el puntero char
devuelto ya que el strdup
asigna la memoria con la llamada a la función malloc
.
strdup
toma un único argumento: la cadena de origen que se va a duplicar y devuelve el puntero a una cadena recién copiada. La función devuelve NULL
en caso de error, es decir, cuando no hay suficiente memoria para asignar. En este caso, estamos recuperando la variable de entorno HOME
usando la función getenv
y copiando su valor 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);
}
Producción :
/home/user
Utilice la función strndup
para duplicar la cadena dada en C
strndup
es una función similar que toma un argumento adicional para especificar el número de bytes que deben copiarse como máximo. Esta versión es útil para copiar solo ciertas partes de la cadena. Sin embargo, tenga en cuenta que strndup
agrega un byte nulo de terminación a los caracteres copiados, lo que garantiza que se almacene como formato de cadena de estilo C y pueda manipularse como tal.
#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);
}
Producción :
/home
Utilice la función strdupa
para duplicar la cadena dada en C
strdupa
es parte de la biblioteca GNU C y puede no estar disponible en otros compiladores C. strdupa
es similar a la función strdup
excepto que usa alloca
para la asignación de memoria. La función alloca
implementa la asignación de memoria en la región de la pila, y el área se libera automáticamente cuando regresa la función de llamada. Por lo tanto, el puntero devuelto por strdupa
no debe liberarse explícitamente con la llamada free
ya que resultará en un error de segmentación. Tenga en cuenta que la macro _GNU_SOURCE
debe definirse para compilar el código correctamente.
#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);
}
Producción :
/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