ft_strdup

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

Deixe um comentário