• Viernes 8 de Noviembre de 2024, 19:54

Autor Tema:  Reserva De Memoria  (Leído 1755 veces)

iori2029

  • Miembro activo
  • **
  • Mensajes: 48
    • Ver Perfil
Reserva De Memoria
« en: Viernes 10 de Junio de 2005, 01:26 »
0
Hola a todos.

Mi problema es el siguiente, necesito saber como reservar memoria para varias cadenas de manera dinamica, por ejemplo el usuario dice que quiere hacer un cuestionario de 10 preguntas y que quiere que sea de incisos, de 2 incisos por pregunta en este caso, entonces el total de cadenas a escribir sera de 30 cadenas(Pregunta1,respuesta1 de pregunta1,respuesta2 de pregunta1,Pregunta2 etc.....)
Bueno hasta ahi creo que vpy bien, quiero guardar todas esas cadenas en una variable de tipo **puntero, y despues escribirlas a un archivo con fwrite,para su posterior lectura con fread.

Una idea, mas o menos lo he intentado asi puntero=(char **) malloc(sizeof(char)*totaldecadenas);   y escribiendolas con fwrite y con un bucle ,pero no me sale bien. Agradecere su ayuda. :devil:

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Reserva De Memoria
« Respuesta #1 en: Sábado 11 de Junio de 2005, 03:56 »
0
Te paso un programa de ejemplo que hace lo que quieres
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main ()
  7. {
  8.   FILE *fp;
  9.   char ch;
  10.   int i;
  11.   char *cadenas[] = {
  12.     "cadena 0. Cero",
  13.     "cadena 1. Cero Uno",
  14.     "cadena 2. Cero Uno Dos",
  15.     "cadena 3. Cero Uno Dos Tres",
  16.     "cadena 4. Cero Uno Dos Tres Cuatro",
  17.     "cadena 5. Cero Uno Dos Tres Cuatro Cinco",
  18.     "cadena 6. Cero Uno Dos Tres Cuatro Cinco Seis",
  19.     "cadena 7. Cero Uno Dos Tres Cuatro Cinco Seis Siete",
  20.     "cadena 8. Cero Uno Dos Tres Cuatro Cinco Seis Siete Ocho",
  21.     "cadena 9. Cero Uno Dos Tres Cuatro Cinco Seis Siete Ocho Nueve",
  22.   };
  23.   int ncadenas = sizeof (cadenas) / sizeof (char *);
  24.   char **caddin = (char **)malloc (ncadenas);
  25.     for (i = 0; i < ncadenas; i++) {
  26.     caddin[i] = (char *)malloc (strlen (cadenas[i]) + 1);
  27.     strcpy (caddin[i], cadenas[i]);
  28.   }
  29.   fp = fopen ("cadenas.txt", "w");
  30.   for (i = 0; i < ncadenas; i++)
  31.     fprintf (fp, "%s\n", caddin[i]);
  32.   fclose (fp);
  33.  
  34.   for (i = 0; i < ncadenas; i++)
  35.     free (caddin[i]);
  36.   free (caddin);
  37.  
  38.   fp = fopen ("cadenas.txt", "r");
  39.   while ((ch = fgetc (fp)) != EOF)
  40.     putchar (ch);
  41.   fclose (fp);
  42.   system ("pause");
  43.   return EXIT_SUCCESS;
  44. }
  45.  
  46.  

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Reserva De Memoria
« Respuesta #2 en: Sábado 11 de Junio de 2005, 04:47 »
0
Cita de: "iori2029"
Hola a todos.

Mi problema es el siguiente, necesito saber como reservar memoria para varias cadenas de manera dinamica, por ejemplo el usuario dice que quiere hacer un cuestionario de 10 preguntas y que quiere que sea de incisos, de 2 incisos por pregunta en este caso, entonces el total de cadenas a escribir sera de 30 cadenas(Pregunta1,respuesta1 de pregunta1,respuesta2 de pregunta1,Pregunta2 etc.....)
Bueno hasta ahi creo que vpy bien, quiero guardar todas esas cadenas en una variable de tipo **puntero, y despues escribirlas a un archivo con fwrite,para su posterior lectura con fread.

Una idea, mas o menos lo he intentado asi puntero=(char **) malloc(sizeof(char)*totaldecadenas);   y escribiendolas con fwrite y con un bucle ,pero no me sale bien. Agradecere su ayuda. :devil:
Seguro que ese malloc reserva suficiente memoria???? ¿no debería ser tamaño de un puntero a char en lugar de tamaño de un char?

iori2029

  • Miembro activo
  • **
  • Mensajes: 48
    • Ver Perfil
Re: Reserva De Memoria
« Respuesta #3 en: Lunes 13 de Junio de 2005, 22:51 »
0
Si, es que me falto , despues de ese malloc sigue uno por cada uno de las cadenas

for(numelementos=0; numelementos<totalcadenas; numelementos++)
 puntero[numelementos]=(char *) malloc(sizeof(char)*255); //Creo que asi se reserva para una cadena de 255 caracteres o menos

Mas o menos como hace pitukilloloco, ahora con fwrite las escribo con un bucle asi:

fwrite(puntero[numelementos],sizeof(char)*strlen(puntero[numelementos]),1,archivo);

pero al querer leerlos con fread no los lee bien

fread(puntero[numelementos],sizeof(char),1,archivo);

Bueno quiza aqui no me explico bien(pero sus consejos me sirvieron mucho), voy a subir el codigo(nada mas que tenga tiempo :)  ) que me da problemas para que me den su opinion.Gracias

iori2029

  • Miembro activo
  • **
  • Mensajes: 48
    • Ver Perfil
Re: Reserva De Memoria
« Respuesta #4 en: Viernes 17 de Junio de 2005, 18:40 »
0
Miren(perdon por  la tardanza,la chamba, la chamba)bueno este es el codigo que me da problemas, es un fichero de cabecera en la funcion int nuevo() en la parte donde hay que escribir las cadenas de texto capturadas de manera dinamica a un archivo binario.No me captura todas, no se si el problema es con la reserva de la memoria o al escribir en el archivo.Por cierto la variable texto esta declarada en otro archivo como char **pregunta;

Agradeceria mucho su ayuda.

Gracias de antemano. :devil:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.