Ayuda, que esta mal ?

Iniciado por onlinne, 6 Noviembre 2016, 22:33 PM

0 Miembros y 1 Visitante están viendo este tema.

onlinne

Tengo esta funcion:
#include <stdio.h>
#include <conio.h>

char *copiar(char * cad)
{
   char cad2[20];
   int i=0;
   while((cad!='\0') || (cad[i+1]!='\0'))
   {
      cad2== cad;
      i++;
   }return cad2;
}
int main()
{
   char cad[20];
   scanf("%s",&cad);
   printf("%s",copiar(cad));
   getch();
}

lo que hace es copiar los caracteres de un vector a otro. pero cuando la pongo a ejecutar me da unos caracteres muy extraños, y ayer , que fue la ultima vez que funciono, cuando ponia dos palabras ejemplo: Hola como estas. solo me mostraba el hola, no el resto

MAFUS

Tienes mal 2 cosas.
scanf("%s",&cad);
Una variable tipo cadena no debe pasarle su dirección con & a scanf.
Debería ser así:
scanf("%s", cad);

Por otra parte estás devolviendo, en la función copiar, un array local. Éste se destruye al salir de la función. Deberías usar malloc sobre un puntero y devolverlo; esto es memoria del montón y permanece entre llamadas, a diferencia de la pila.

onlinne

no entiendo :

Por otra parte estás devolviendo, en la función copiar, un array local. Éste se destruye al salir de la función. Deberías usar malloc sobre un puntero y devolverlo; esto es memoria del montón y permanece entre llamadas, a diferencia de la pila.
podrias explicarlo porfavor

MAFUS

Tiene que ver con la memoria de la pila (stack) y el montón (heap).
Cuando entras en una función C adquiere espacio en la pila para las variables y los arrays. Cuándo se sale de la función toda esta memoria desaparece.
Por otra parte la memoria del montón es más permanente, por el hecho de que la controlas tú. Adquieres memoria con una de las funciones de la familia malloc. Si creas un array en el montón, éste no depende de la función por eso aunque salgas de ella lo que hay en memoria permanece. Si devuelves de la función el puntero que apunta a esa zona de memoria, en tu main recibirás dicha dirección y podrás trabajar con ella.

Te recomiendo que busques sobre memoria stack y heap. Te aclarará muchas dudas.