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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Retornar punteros char? ¿Si o si memoria dinamica?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Retornar punteros char? ¿Si o si memoria dinamica?  (Leído 5,687 veces)
Xargam

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Retornar punteros char? ¿Si o si memoria dinamica?
« Respuesta #10 en: 26 Junio 2018, 22:39 pm »

Como ya te han dicho antes, en c no hay tipo de datos string, luego solo queda trabajar con arreglos de chars (lo que viene siendo la propia imp!ementacion del tipo string). Ahora, si intentas devolver una variable local en una funcion los datos retornados seran inconsistentes e impredecibles ya que dicha variable local al salir de su ambito (funcion) sera eliminada del stack. Para lograr lo que quieres tienes un par de opciones:

1- Creas la variable en la funcion padre y la pasas como parametro por referencia

2- Usas variables globales, estáticas o memoria dinamica (como dijeron antes tienes que estar seguro de eliminarla cuando no la necesites)

3- Haces una copia de la variable retornada justo al salir de la funcion:
    Si es una cadena puedes usar strcpy, strncpy, etc. Para cualquier otro tipo de datos memcpy, copy, etc
    
Código
  1. char mystr[MAX_PATH];
  2. char *ptr = MyFunction();
  3. if(ptr != null)
  4. // evita bof
  5. strncpy(mystr, ptr, sizeof(mystr));

BONUS- Si trabajar estrictamente con char* no es un requisito entonces usa std::string al retornar de la funcion:
Código
  1. std::string mystr = MyFunction();

Saludos

Podrias mostrar un ejemplo mas detallado de la opcion 3 por favor?


En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Retornar punteros char? ¿Si o si memoria dinamica?
« Respuesta #11 en: 27 Junio 2018, 00:26 am »

Para la opcion 3 ya te he puesto un codigo de ejemplo, la funcion MyFunction() es simplemente cualquier funcion que manipule un arreglo de chars local y lo devuelva:

Código
  1. char * MyFunction()
  2. {
  3.    char mystr[255] = "Hello\0";
  4.    return mystr;    
  5. }


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
quien me puede ayudar a pasar este codigo con punteros y memoria dinamica
Programación C/C++
attackers 3 2,755 Último mensaje 23 Noviembre 2011, 13:04 pm
por attackers
Punteros y memoria dinamica
Programación C/C++
bemone 4 2,561 Último mensaje 30 Agosto 2015, 03:13 am
por geeke
[AYUDA] retornar un char * valido
Programación C/C++
bash 4 2,414 Último mensaje 22 Abril 2016, 14:45 pm
por MAFUS
Consutla sobre un problema con punteros y memoria dinamica.
Programación C/C++
Arturo400 1 1,753 Último mensaje 22 Septiembre 2016, 22:15 pm
por AlbertoBSD
Consulta sobre punteros y memoria dinámica
Programación C/C++
ing_maipu 5 4,095 Último mensaje 18 Octubre 2017, 19:21 pm
por ing_maipu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines