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
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.
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: