C/Visual C - problema con fstream

 
Vista:

problema con fstream

Publicado por Oliver++ (339 intervenciones) el 12/07/2003 22:49:31
porqué este programa imprime la cadena2 2 veces y con basura?
void main ()
{
char cadena1 [] = "una cadena";
char cadena2[12];

fstream archivoIO;

archivoIO.open ( "archivo.dat", ios::in | ios::out | ios::binary );
archivoIO.write ( cadena1, 12 );

archivoIO.read ( cadena2, 12 );
archivoIO.close ();

cout<< cadena2<< endl;
cout<< archivoIO.fail ()<< endl;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con fstream

Publicado por JoseGR (41 intervenciones) el 14/07/2003 10:49:32
Hola, el problema es que cuando lees cadena2, no finalizas la cadena con \0 , (el fstream es binario, lee un flujo de bytes), para terminarlo correctamente debes colocar el \0 en la posicion que te indica el read (el cual retorna el numero de caracteres que realmente leyo) si es mayor que 0.

La razon de que imprima dos veces la cadena es que el cout se detiene con el \0, y como cadena2 no lo tiene continua escribiendo y lo que sigue a cadena2 en memoria es cadena1 (el cout se detiene con el \0 de cadena 1). la basura que sale sera seguramente es lo que contiene cadena2 en la posiciones 10 y 11 que no son sobreescritas por el read.

Adios
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar