Use a função strdup em C
-
Use a função
strdup
para duplicar a string fornecida em C -
Use a função
strndup
para duplicar a string fornecida em C -
Use a função
strdupa
para duplicar a string fornecida em C
Este artigo irá explicar vários métodos de como usar a função strdup
em C.
Use a função strdup
para duplicar a string fornecida em C
strdup
é uma das funções compatíveis com POSIX que está disponível na maioria dos sistemas operacionais baseados em UNIX. Ele implementa a funcionalidade de cópia de strings, mas faz a alocação e verificação de memória internamente. Embora um usuário seja responsável por liberar o ponteiro char
retornado, já que o strdup
aloca a memória com a chamada da função malloc
.
strdup
recebe um único argumento - a string de origem a ser duplicada e retorna o ponteiro para uma string recém-copiada. A função retorna NULL
em caso de falha, ou seja, quando não há memória suficiente para alocar. Neste caso, estamos recuperando a variável de ambiente HOME
usando a função getenv
e copiando seu valor com 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);
}
Resultado:
/home/user
Use a função strndup
para duplicar a string fornecida em C
strndup
é uma função semelhante que recebe um argumento adicional para especificar o número de bytes que precisam ser copiados no máximo. Esta versão é útil para copiar apenas algumas partes da string. Observe, porém, que strndup
adiciona o byte nulo de terminação aos caracteres copiados, garantindo assim que ele seja armazenado no formato de string no estilo C e possa ser manipulado 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);
}
Resultado:
/home
Use a função strdupa
para duplicar a string fornecida em C
strdupa
é parte da biblioteca GNU C e pode não estar disponível em outros compiladores C. strdupa
é semelhante à função strdup
exceto que usa alloca
para alocação de memória. A função alloca
implementa a alocação de memória na região da pilha, e a área é liberada automaticamente quando a função de chamada retorna. Portanto, o ponteiro retornado de strdupa
não deve ser liberado explicitamente com a chamada free
, pois isso resultará em uma falha de segmentação. Observe que a macro _GNU_SOURCE
deve ser definida para compilar o código com sucesso.
#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);
}
Resultado:
/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