Cita de: MRx86 en 16 Noviembre 2016, 20:05 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 (c) [Seleccionar]
char* RetStr(){
char str[] = "Hola";
return str;
}
Código (c) [Seleccionar]
char* RetStr(){
char * str = (char*)malloc(5);
strcpy(str,"Hola\0");
return str;
}
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!