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;
}
"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
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.
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;
}
No no, he dicho fprintf. Con la F al principio.