estructuras en ficheros

Iniciado por pedroedlp, 23 Abril 2014, 02:17 AM

0 Miembros y 1 Visitante están viendo este tema.

pedroedlp

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:

#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;
}

engel lex

"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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

pedroedlp

y asi no me deberia andar?

#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;
}

amchacon

No no, he dicho fprintf. Con la F al principio.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar