elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda, que esta mal ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda, que esta mal ?  (Leído 1,748 veces)
onlinne

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda, que esta mal ?
« en: 6 Noviembre 2016, 22:33 pm »

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


« Última modificación: 6 Noviembre 2016, 22:46 pm por onlinne » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda, que esta mal ?
« Respuesta #1 en: 6 Noviembre 2016, 22:57 pm »

Tienes mal 2 cosas.
Código:
scanf("%s",&cad);
Una variable tipo cadena no debe pasarle su dirección con & a scanf.
Debería ser así:
Código:
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.


En línea

onlinne

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda, que esta mal ?
« Respuesta #2 en: 6 Noviembre 2016, 23:02 pm »

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
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda, que esta mal ?
« Respuesta #3 en: 6 Noviembre 2016, 23:29 pm »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON ESTA FUENTE
Diseño Gráfico
lucaprodan 2 2,623 Último mensaje 12 Abril 2007, 06:59 am
por DelmasX
Esta PC está bien? | AYUDA CON UN HACKER MALICIOSO « 1 2 »
Seguridad
Chuxxx 10 11,960 Último mensaje 14 Mayo 2010, 19:43 pm
por Chuxxx
Ayuda con esta .dll
Ingeniería Inversa
juanba17 1 1,868 Último mensaje 9 Agosto 2015, 16:08 pm
por MCKSys Argentina
Que es lo que esta mal? Ayuda!!!
Programación C/C++
cinfi 5 2,575 Último mensaje 7 Febrero 2016, 19:01 pm
por _--ziarox--__
¿Has perdido tu móvil Android? Esta web te dice dónde está y te ayuda a ...
Noticias
wolfbcn 0 2,455 Último mensaje 16 Abril 2016, 02:42 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines