Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2009, 14:07
a_moreno
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Problema con punteros y datos basura

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