duplicar cadena

C
#include <stdio.h>
#include <stdlib.h>


//  i i i i i
//  0 1 2 3 4
//  c a s a 0 (cad)

//  - - - - - (nueva)
// devuelve una copia dinamica de la cadena pasada como parametro.
char* strdup(char cad[]){
  char *dupli;
  int i = 0;

  while(cad[i] != '\0'){
    i++;
  }

  dupli = (char *)malloc((i + 1) * sizeof(char)); //ya tengo la cadena con su tamaño adecuado

  i = 0;
  while(cad[i] != '\0'){
    dupli[i] = cad[i];
    i++;
  }

  dupli[i] = '\0'; //el \0 no entra al bucle, lo tengo que copiar yo.

  return dupli;
}

int main(){
  char cadena[100];

  printf("Introduce una cadena: ");
  scanf("%[^\n]%*c", cadena);

  char *duplicada = strdup(cadena);

  printf("La cadena es => %s\n", duplicada);
  free(duplicada);

  return 0;
}
Source

Also in C: