[C]duda sobre struct y fwrite.

Iniciado por Drewermerc, 2 Octubre 2014, 19:18 PM

0 Miembros y 3 Visitantes están viendo este tema.

Drewermerc

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.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOM_FILE "datos.txt"
struct personas{
char nombre[20];
char apellido[20];
int edad;
};
int main(void)
{
struct personas vec[2];
sprintf(vec[0].nombre, "%s", "juan");
sprintf(vec[0].apellido, "%s", "rodrigez");
vec[0].edad = 10;

sprintf(vec[1].nombre, "%s", "pedro");
sprintf(vec[1].apellido, "%s", "gonzales");
vec[1].edad = 20;

FILE *f1;
if ((f1=fopen(NOM_FILE,"w")) == NULL)
{
perror(NOM_FILE);
return EXIT_FAILURE;
}

fwrite(vec[0].nombre,sizeof(char) ,strlen(vec[0].nombre),f1);
fclose(f1);

return EXIT_SUCCESS;
}

como sería para imprimir toda la estructura en un fichero.
Espero me puedan ayudar.
Saludos.
Drewermec.

ivancea96

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

Drewermerc

Hola ivancea96.
Gracias por responder y bueno ya habia provado de esa forma de poner:

fwrite(vec,sizeof(vec) ,1,f1);


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í:


juan\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00

y lo unico que si no imprime es la variable edad.
por eso preguntaba si se podia hacer .
Saludos.
Drewermerc.

ivancea96

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.

Drewermerc

Entonces no hay una forma de solo imprimir los espacios ocupados de el array.

ivancea96

Imprimiendo miembro a miembro de la struct.

Drewermerc

Bueno yo me refería imprimiendo toda la estructura.
pero bueno ya quedo aclarada mi duda.
gracias ivancea96.
Saludos.
Drewermer.