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)
| | |-+  porque "no es bueno" retornar strings por funciones en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: porque "no es bueno" retornar strings por funciones en C?  (Leído 1,583 veces)
MRx86

Desconectado Desconectado

Mensajes: 88


Math's the way to do philosophy with the universe


Ver Perfil
porque "no es bueno" retornar strings por funciones en C?
« en: 16 Noviembre 2016, 20:05 pm »

Hola

toda la vida he visto que aconsejan no usar strings como valor de retorno de funciones (esto es en C, nunca lo he visto en C++, aunque creo que recuerdo haber leido que este problema de no poder retornar cadenas por funciones se arreglo en C++), y siempre he seguido este consejo retornando siempre las cadenas por buffers pasados por parametro (mal hecho, al no haber investigado el porque se recomienda esto).

Y viendo el siguiente codigo:

http://foro.elhacker.net/programacion_cc/manejo_de_procesos_en_c-t82074.0.html

justamente en la linea que dice

printf("ERROR - %s",MensajeError(GetLastError()));

se ve claramente que la funcion MensajeError() retorna una cadena (en este caso el nombre del error).

y si uno se pone a convertir el codigo  a ensamblador (o ver directamente el codigo generado por un compilador, en este caso el famoso GCC) se ve que si se puede retornar una cadena sin generar errores.

la pregunta es la siguiente:

¿Porque no se recomienda retornar cadenas en C?

Saludos y gracias... :-\


« Última modificación: 16 Noviembre 2016, 20:12 pm por MRx86 » En línea

"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein
kub0x
Enlightenment Seeker
Colaborador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: porque "no es bueno" retornar strings por funciones en C?
« Respuesta #1 en: 16 Noviembre 2016, 20:26 pm »

¿Porque no se recomienda retornar cadenas en C?

No es que no se recomienden devolver cadenas en C. Existen unas pautas que si se cumplen entonces se considera seguro devolver la cadena.

Si comparamos:

Código
  1. char* RetStr(){
  2. char str[] = "Hola";
  3. return str;
  4. }

Código
  1. char* RetStr(){
  2. char * str = (char*)malloc(5);
  3. strcpy(str,"Hola\0");
  4. return str;
  5. }

La primera reserva un char * en la stack (pila) y al hacer return como bien sabemos los valores de la función en la pila salen. El valor de la dirección de memoria de la variable str no tendrá sentido alguno.
En el segundo reservamos memoria en el heap dinamicamente, al devolver el valor los valores de la pila salen pero el heap se mantiene intacto por lo tanto no tenemos perdida de significado.

Saludos!


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines