Acabo de empezar con la reserva dinámica de memoria y no logro entenderlo del todo, ¿podríais echarme una mano?
El programa debe duplicar las letras de una palabra introducida y devolver el número de letras de la original. Todo ello desde una función (Duplicar()). La función también debe reservar memoria dinámica para la nueva palabra.
¿Debo reservar memoria para la primera palabra también? ¿La reserva de memoria la debo de hacer en la función o en el main? Tal como tengo el programa ahora no devuelve la palabra duplicada a no ser que lo ponga así:
(Quitando free(palabra2) y escribiendo
*palabra2=(char *)malloc(*nl*sizeof(char)+1); en vez de
palabra2=(char *)malloc(*nl*sizeof(char)+1);)
Código C:
Ver originalvoid Duplicar(char *palabra, char *palabra2, int *nl)
{
int i=0;
int j=0;
while(palabra[i]!='\0') i++;
*nl=i;
i=0;
*palabra2
=(char *)malloc(*nl
*sizeof(char)+1); while(palabra[i]!='\0')
{
palabra2[j]=palabra[i];
j++;
palabra2[j]=palabra[i];
i++;
j++;
}
palabra2[j]='\0';
}
Así que intuyo que el problema está en malloc y como lo utilizo, muchas gracias por vuestra ayuda.
Código C:
Ver original#include <stdio.h>
#define LNX 9999
void Duplicar(char *, char *, int *);
main()
{
char word[LNX],word2[LNX];
int letras=0;
printf("Introduza a palabra a duplicar: "); Duplicar(word,word2,&letras);
printf("\nA palabra duplicada e: %s",word2
); printf("\nO numero de letras da palabra orixinal e: %d",letras
); return 0;
}
void Duplicar(char *palabra, char *palabra2, int *nl)
{
int i=0;
int j=0;
while(palabra[i]!='\0') i++;
*nl=i;
i=0;
palabra2
=(char *)malloc(*nl
*sizeof(char)+1); while(palabra[i]!='\0')
{
palabra2[j]=palabra[i];
j++;
palabra2[j]=palabra[i];
i++;
j++;
}
palabra2[j]='\0';
}