A função strdup() duplica uma string.
Declaração
char *strdup(const char *s);
Parâmetros
- s – String que será duplicada.
Retorno
Essa função retorna um ponteiro para uma string terminada em ‘\0’, que é uma cópia/duplicata da string apontada por s. A memória é obtida dinamicamente usando malloc(). Retorna NULL se a alocação falhar.
Exemplo
#include <stdio.h>
#include<string.h>
int main() {
char *str = "Pokemon";
char *result;
result = strdup(str);
printf("A string é : %s", result);
return 0;
}
Saída:
A string é : Pokemon
Codificando a função
Primeiramente teremos que alocar dinamicamente com malloc() a string duplicada que iremos retornar. Para alocar devemos saber o tamanho da string (pode usar o ft_strlen()). Se a alocação falhar retornamos NULL. Caso contrário copiamos uma string na outra (podemos implementar a ft_strcpy() para isso). Uma das possibilidades de código é essa:
char *ft_strdup(const char *str)
{
char *aux;
int size;
int i;
i = 0;
size = 0;
while (str[size]) //descobrindo o tamanho da string
size++;
if (!(aux = malloc(sizeof(char) * (size + 1)))) //alocando, não
return (NULL); //esquecer do +1 do '\0'
while (str[i])
{
aux[i] = str[i]; //copiando uma string na outra
i++;
}
aux[i] = '\0'; //terminando a string
return (aux); //retornando a cópia
}
Outra possibilidade poderia ser essa:
char *ft_strdup(const char *str)
{
char *aux;
if (!(aux = malloc(sizeof(char) * (ft_strlen(str) + 1))))
return (NULL);
ft_strcpy(aux, str);
return (aux);
}
Referências
http://man7.org/linux/man-pages/man3/strdup.3.html
https://www.geeksforgeeks.org/strdup-strdndup-functions-c/
https://www.tutorialspoint.com/strdup-and-strdndup-in-c-cplusplus