Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pedroedlp en 23 Abril 2014, 02:17 am



Título: estructuras en ficheros
Publicado por: pedroedlp en 23 Abril 2014, 02:17 am
Hola quiero saber porque esto no me funciona? osea el porograma se compila y ejecuta, pero cuando abro el archivo txt, me aparecen sibolos raros:

Código:
#include <stdio.h>

struct moto{

    int precio, km;
    char *marca;
    char *descripcion;

};


int main(){

    FILE *pf;

    pf=fopen("datos.txt", "wb");

    struct moto moto1;

    moto1.precio=1500;
    moto1.km=0;
    moto1.marca="Yamaha";
    moto1.descripcion="La moto es muy linda y rapida";

    fwrite(&moto1, sizeof(moto1), 1, pf);

    fclose(pf);

    return 0;
}


Título: Re: estructuras en ficheros
Publicado por: engel lex en 23 Abril 2014, 02:21 am
Código:
"wb"
indicaste write binary

los datos se guardan en su formato original a nivel de memoria... si abres el .txt en un procesador de texto tipo notepad, el asumirá que lo que está ahí es ascii... así que hará conversiones erroneas y no será comprensible...

si escribes un archivo en binario no es para ser leído como texto, es para ser leído como binario


Título: Re: estructuras en ficheros
Publicado por: amchacon en 23 Abril 2014, 02:38 am
No es eso Engel Lex, el problema esque está escribiendo la estructura literal. Y ahí no hay ningun texto (solo "punteros" a texto).

Para imprimir texto debes usar fprintf, se usa igual que el printf pero poniendo el correspondiente FILE* en el primer argumento.


Título: Re: estructuras en ficheros
Publicado por: pedroedlp en 23 Abril 2014, 03:46 am
y asi no me deberia andar?

Código:
#include <stdio.h>

struct moto{

    int precio, km;
    char *marca;
    char *descripcion;

};


int main(){

    FILE *pf;

    pf=fopen("datos.txt", "w+b");

    struct moto moto1;

    moto1.precio=1500;
    moto1.km=0;
    moto1.marca="Yamaha";
    moto1.descripcion="La moto es muy linda y rapida";

    fwrite(&moto1, sizeof(moto1), 1, pf);
   
    fread(&moto2, sizeof(moto2), 1, pf);

    printf("%d\n", moto2.precio);
    printf("%d\n", moto2.km);
    puts(moto2.marca);
    puts(moto2.descripcion);
   

    fclose(pf);

    return 0;
}


Título: Re: estructuras en ficheros
Publicado por: amchacon en 23 Abril 2014, 10:09 am
No no, he dicho fprintf. Con la F al principio.