y asi no me deberia andar?
Habría que saber a que te refieres con "andar".
Si te refieres a almacenar los datos como texto en el archivo eso no sucederá ya que continuas usando la función fwrite.
----
Si te refieres a que el programa correctamente almacene los datos de "moto1" y los lea inmediatamente en "moto2" eso tampoco ya que hay dos errores importantes: los campos "marca" y "descripcion" son punteros y no deberías almacenarlos en el archivo y antes de la lectura debes colocarte al inicio del archivo utilizando la función rewind.
----
Lo mejor por sencillo es utilizar arrays para los campos "marca" y "descripcion". Para imprimir en el archivo utilizas fprintf, mas o menos asi:
struct moto{
int precio;
int km;
char marca[100];
char descripcion[100];
};
/* ... */
pf
= fopen("datos.dat", "w+");fprintf(pf
, "%d\n%d\n", moto1.
precio, moto1.
km); fprintf(pf
, "%s\n", moto1.
descripcion);
Y para leerlos como texto:
fscanf(pf
, "%d %d%*c", &moto2.
precio, &moto2.
km); fgets(moto2.
marca, 100, pf
); fgets(moto2.
descripcion, 100, pf
);
Un saludo