Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





ficheros

Iniciado por davirro, 30 de Diciembre de 2007, 01:54:51 PM

« anterior - próximo »

davirro

hola todos, tengo un problema con los ficheros, seguro que para vosotros es facil pero para mi es imposible y seguro que es una tonteria, resulta que intento guardar en un fichero la palabra "hola" y un dato int , total 9 bytes, cuando lo leo del fichero solo me lee 8 porque cuando llega al caracter \0 comienza a cargar los 4 bytes del int, como hago para cargar ese dato nulo?

#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
 
 FILE *fichero;
 char nombre[20] = "datos.dat";
 unsigned int i = 1, x1;
 unsigned char hola[5] = "hola";
 unsigned char dato[5];

 fichero = fopen( nombre, "w" );
 
 printf( "ESCRIBIENDO en %s \n", nombre);
 
 fprintf( fichero, "%s\n%d\n", hola, i );
 printf( "%s\n%d\n", hola, i );
 
 printf( "Tamaño de lo que se ha grabadao\n" );
 printf( "%d  %d \n", sizeof (hola),sizeof (i));
 
   
 fprintf( stdout, "Datos guardados en el %s \n", nombre );
 
 fclose(fichero);
 fichero = fopen( nombre, "r" );
 
 printf( "LEYENDO %s \n", nombre );

 fscanf( fichero, "%s\n%d\n", &dato, &x1 );
 printf( "%s\n%d\n", &dato, &x1 );
 
 printf( "Tamaño de lo se ha leido \n" );
 printf( "%d %d \n", sizeof (&dato),sizeof (&x1));
 

 fclose(fichero);

 cin.get();
 return 0;
}


¿por cierto que es mejor usar fstream.h o stdio.h?

gracias

Warchief

Son errores de haber copiado desde el scanf:
Scanf necesita & para pasar la dirección de la variable (punteros), pero printf recibe las variables en sí, no sus punteros.


#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{

 FILE *fichero;
 char nombre[20] = "datos.dat";
 unsigned int i = 1, x1;
 unsigned char hola[5] = "hola";
 unsigned char dato[5];

 fichero = fopen( nombre, "w" );

 printf( "ESCRIBIENDO en %s \n", nombre);

 fprintf( fichero, "%s\n%d\n", hola, i );
 printf( "%s\n%d\n", hola, i );

 printf( "Tamaño de lo que se ha grabadao\n" );
 printf( "%d  %d \n", sizeof (hola),sizeof (i));

 
 fprintf( stdout, "Datos guardados en el %s \n", nombre );

 fclose(fichero);
 fichero = fopen( nombre, "r" );

 printf( "LEYENDO %s \n", nombre );

 fscanf( fichero, "%s\n%d\n", &dato, &x1 );
 //--------------------------------------------------------------
 // ----- SOBRAN LOS &
 printf( "%s\n%d\n", &dato, &x1 );
 // printf( "%s\n%d\n", dato, x1 );
 //--------------------------------------------------------------

 printf( "Tamaño de lo se ha leido \n" );
 //--------------------------------------------------------------
 // ----- SOBRAN LOS &
 printf( "%d %d \n", sizeof (&dato),sizeof (&x1));
 // printf( "%d %d \n", sizeof (dato),sizeof (x1));
 //--------------------------------------------------------------

 fclose(fichero);

 cin.get();
 return 0;
}


En cualquier caso sizeof te da el tamaño de la variable, no lo que has leído. sizeof(dato) da 5 desde el principio.

davirro

entonces cargaba bien  :o  lo que estaba mal era la salida en pantalla ,
gracias por la ayuda, haber si me aclaro con los punteros  :lol:






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.