Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alesspale en 17 Agosto 2016, 02:58 am



Título: Como hago para imprimir un struct en archivo .txt?
Publicado por: alesspale en 17 Agosto 2016, 02:58 am
Buenas estoy haciendo un pequeño proyecto en  C y quiero imprimir el siguiente struc en un archivo
Código
  1. typedef struct clientes{
  2.    char nombres[50], Correo[50];
  3.    long cedula;
  4.    char telefono[12];
  5.    int edad,millasrecorridas, pesoEQ;
  6.    }
  7.  
  8.  
  9. cnt;


El problema es que no quiero usar fprintf, ni fputs para imprimirlo porque me ocupa demasiado código y lo veo poco eficiente . Use fwrite pero me daba muchos problemas y casi siempre  imprime basura

Alguien conoce una manera o alguna función parecida al fwrite pero sin ese inconveniente ?


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: class_OpenGL en 17 Agosto 2016, 03:26 am
Yo creo que no se "imprime" basura. Yo creo que lo que tu ves como basura es el valor binario de los enteros, por lo que yo te aconsejo que sigas usando fwrite:

Código
  1. fwrite(&cnt, sizeof(clientes), 1, archivo);


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: alesspale en 17 Agosto 2016, 05:04 am
No amigo, estoy seguro que es basura.


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: class_OpenGL en 17 Agosto 2016, 05:08 am
Estás seguro de que has inicializado la estructura andes de guardarla? También ten en cuenta que la cadena tiene longitud 50, por lo que si por ejemplo la cadena es "Carlos", entonces el resto de bytes de la cadena contendrá basura. Te pongo un ejemplo con una cadena de 10 elementos. Supongamos la siguiente cadena:

Código
  1. char cadena[10] = "Cadena";

Dada la información, el arreglo cadena contiene 'C', 'a', 'd', 'e', 'n', 'a', '\0', pero, ¿qué pasa con el resto de bytes de la cadena? Pues simplemente están llenos de basura, pero eso no pasa nada, para eso está el indicador de final de cadena ('\0'). La cadena se vería así:

'C', 'a', 'd', 'e', 'n', 'a', '\0', BASURA, BASURA, BASURA

donde basura vale cualquier valor "aleatorio"


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: alesspale en 17 Agosto 2016, 05:58 am
Ese es otro problema que tengo con el fwrite que no te imprime hasta el '\0' si no que toda la cadena.
Como haría para eso? por que el struct tiene que llenarlo el usuario


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: class_OpenGL en 17 Agosto 2016, 07:31 am
Creo que no me has entendido, una vez pasado el caracter nulo, da igual lo que haya guardado en la cadena, pues siempre leerás desde el principio de la cadena hasta el carácter nulo, así que si se guarda 'basura', no pasa nada. Si de verdad te molesta esa basura, simplemente inicializa el arreglo con caracteres nulos, y ya después almacenas la cadena en si.


Título: Re: Como hago para imprimir un struct en archivo .txt?
Publicado por: AlbertoBSD en 17 Agosto 2016, 18:39 pm
Citar
imprime basura

Tambien puede ser problema que el archivo se abra en formato binario o no....

Y si muchos usuarios no saben que con fwrite se imprime el bloque completo de memoria que ocupa una estrucutura tenga o no basura o  este o no este correctamente llenado.

Los numero se guardan en formato binario por lo cual no se veran como "1234" sino como un  monto de bytes sin sentido (Caracteres no imprimibles en la mayoria de los casos)

Saludos!