Hola y buen día a todos, verán tengo unas pequeñas dudas con respecto a un código que es el siguiente :
Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct personaje
{
char nombre[10];
char hp[10];
char mp[10];
};
int main()
{
struct personaje personaje1;
FILE *archivo;
int x=0;
archivo = fopen("C:/fichero_fwrite.txt","w+");
do
{
fflush(stdin);
printf("Introduce el nombre:"); fflush(stdout);
gets(personaje1.nombre);
printf("Introduce el hp:"); fflush(stdout);
gets(personaje1.hp);
printf("Introduce el mp:"); fflush(stdout);
gets(personaje1.mp);
fwrite(&personaje1,sizeof(personaje1),1,archivo);
printf("Desea agregar otro personaje?"); fflush(stdout);
fflush(stdout);
scanf("%i",&x); fflush(stdout);
} while (x!=1);
fclose(archivo);
}
No me genera ningún error y "funciona", sin embargo, a la hora de checar el archivo que generé me encuentro con datos basura entre los datos del registro, por ejemplo supongamos que personaje1.nombre="fulano",personaje1.hp="45",pers onaje1.mp="3".
En el archivo se muestra esto :
fulano h<45 *®Àw3 #C¶€|¨ÿ
¿Qué se supone que tengo que hacer para que esta basura no me aparezca?.
La otra duda es que si cambio la definición del struct por :
Código:
struct personaje
{
char nombre[];
char hp[];
char mp[];
};
No me genera ningún error pero el archivo se genera completamente vacío, y si escribo el struct como :
Código:
struct personaje
{
char *nombre;
char *hp;
char *mp;
};
Me genera un error en tiempo de ejecución a la hora de leer cualquiera de los tres campos,el error es del tipo "windows a detectado un error y debe cerrarse" ¿estoy haciendo algo mal o de plano no se puede hacer con ninguna de estas definiciones?
Saludos y gracias por su tiempo XD