Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Drewermerc en 2 Octubre 2014, 19:18 pm



Título: [C]duda sobre struct y fwrite.
Publicado por: Drewermerc en 2 Octubre 2014, 19:18 pm
Hola a todos.
Bueno mi duda es la siguiente.
se puede pasar una estructura completa a un fichero usando fwrite o se tiene que pasar valor por valor.
por ejemplo tengo este código.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define NOM_FILE "datos.txt"
  5. struct personas{
  6. char nombre[20];
  7. char apellido[20];
  8. int edad;
  9. };
  10. int main(void)
  11. {
  12. struct personas vec[2];
  13. sprintf(vec[0].nombre, "%s", "juan");
  14. sprintf(vec[0].apellido, "%s", "rodrigez");
  15. vec[0].edad = 10;
  16.  
  17. sprintf(vec[1].nombre, "%s", "pedro");
  18. sprintf(vec[1].apellido, "%s", "gonzales");
  19. vec[1].edad = 20;
  20.  
  21. FILE *f1;
  22. if ((f1=fopen(NOM_FILE,"w")) == NULL)
  23. {
  24. perror(NOM_FILE);
  25. return EXIT_FAILURE;
  26. }
  27.  
  28. fwrite(vec[0].nombre,sizeof(char) ,strlen(vec[0].nombre),f1);
  29. fclose(f1);
  30.  
  31. return EXIT_SUCCESS;
  32. }
  33.  
como sería para imprimir toda la estructura en un fichero.
Espero me puedan ayudar.
Saludos.
Drewermec.


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: ivancea96 en 2 Octubre 2014, 19:30 pm
http://stackoverflow.com/questions/4155791/how-to-write-a-struct-to-a-file-using-fwrite (http://stackoverflow.com/questions/4155791/how-to-write-a-struct-to-a-file-using-fwrite)

De todas formas, probar nunca está de más. Prueba a escribir y a leer, e irás viendo cómo es la salida y le antrada


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: Drewermerc en 2 Octubre 2014, 20:17 pm
Hola ivancea96.
Gracias por responder y bueno ya habia provado de esa forma de poner:
Código
  1. fwrite(vec,sizeof(vec) ,1,f1);
  2.  

pero resulta que cuando abro el fichero me dice que hay un error en el fichero y si imprime los valores de la variables bien pero imprime todo el  largo del array algo así:

Código
  1. juan\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
  2.  
y lo unico que si no imprime es la variable edad.
por eso preguntaba si se podia hacer .
Saludos.
Drewermerc.


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: ivancea96 en 2 Octubre 2014, 20:23 pm
Vamos a ver:
nombre es un arreglo de 20 caracteres. Los que no estén ocupados con "juan", estarán vacíos. Y esos elementos también serán escritos en el fichero.

Otra cosa: un int, no es "15684". Son 4 bytes, es decir, 4 caracteres. En el fichero, verás el int como caracteres.


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: Drewermerc en 2 Octubre 2014, 20:35 pm
Entonces no hay una forma de solo imprimir los espacios ocupados de el array.


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: ivancea96 en 2 Octubre 2014, 20:43 pm
Imprimiendo miembro a miembro de la struct.


Título: Re: [C]duda sobre struct y fwrite.
Publicado por: Drewermerc en 2 Octubre 2014, 20:45 pm
Bueno yo me refería imprimiendo toda la estructura.
pero bueno ya quedo aclarada mi duda.
gracias ivancea96.
Saludos.
Drewermer.