Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/03/2016, 01:46
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Problemita con los struc

Una limitación del lenguaje C es que no puede devolver arrays que provienen de la pila (Espero que llegados a este punto sepas la diferencia entre memoria dinámica y pila).

El lenguaje C nació (a grandes rasgos) como una mera traducción del lenguaje ensamblador para poder usarlo con un nivel de abstracción mayor. Esto implica que dicho lenguaje suele adolecer de algunos comportamientos extraños y este es uno de ellos.

Para solventar tu problema tienes dos opciones:
  • Usas memoria dinámica para devolver la lista de elementos (que por otro lado sería más eficiente que la solución que intentas aplicar)
    Código C:
    Ver original
    1. lislibro *ptr = (lislibro*)malloc(sizeof(lislibro));
    2. // rellenas ptr teniendo en cuenta que es un puntero a un array
    3. // (*ptr)[x] = y; <<--- Se puede usar así
    4.  
    5. // ...
    6. // y antes de salir del programa hay que liberar la memoria
    7. free(ptr);
  • En vez de usar el return, que la función reciba una lista sin inicializar como parámetro y se encargue de rellenarla.
    Código C:
    Ver original
    1. void listar(lislibro);
    2.  
    3. int main(int argc, char *argv[]) {
    4.   lislibro libs;
    5.   listar(libs); // OBTENGO EL ARRAY LISLIBROS DE STRUCT
    6.  
    7.   // ...
    8. }
    9.  
    10. void listar(lislibro ll) {
    11.   // lislibro ll; <<--- Ya no hace falta
    12.  
    13.   // ...
    14.  
    15.   // return ll; <<--- esto tampoco
    16. }

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.