basura al final de cadena

Iniciado por Kaxperday, 30 Octubre 2015, 18:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Código (cpp) [Seleccionar]
void escribe()
{
FILE *a = NULL;
a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "ab");
u_char *o = (u_char*)"BUENOS DIASSS";
fwrite(o, sizeof(u_char), strlen("BUENOS DIASSS"), a);
fclose(a);
a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "rb");
fseek(a, 0, SEEK_END);
int c = ftell(a);
cout << c;
fseek(a, 0, SEEK_SET);
u_char *d = new u_char[c]();
fread(d, sizeof(u_char), c, a);
cout << (char*)d;
fclose(a);
}


Llamo a esta funcion 6 veces, salida:

CitarBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSS²²²²-¿B-óÙc
Porque hay basura?

Y cada vez va saliendo más.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

¿Y el caracter nulo con el que terminan las cadenas, sin el cual no se puede saber cuando acaba? fread no lo pone.

Kaxperday

Código (cpp) [Seleccionar]
FILE *a = NULL;
a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "ab");
u_char *o = (u_char*)"BUENOS DIASSS\0";
fwrite(o, sizeof(u_char), strlen("BUENOS DIASSS\0"), a);
fclose(a);
a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "rb");
fseek(a, 0, SEEK_END);
int c = ftell(a);
cout << c;
fseek(a, 0, SEEK_SET);
u_char *d = new u_char[c]();
fread(d, sizeof(u_char), c, a);
cout << (char*)d;
fclose(a);


Código (cpp) [Seleccionar]
BUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSS²²²²

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

Mother of god.
Esa cadena no necesita un caracter nulo explícito. Cuando pones "", ya viene con caracter nulo.

La que necesita un caracter nulo es la que se lee del archivo. fread, como dije, no coloca caracteres nulos.

Código (cpp) [Seleccionar]
cout << (char*)d;
¿Cómo sabe ostream::operator<< la longitud de la cadena apuntada por d?

Kaxperday

Ahhh ok entendí mal jaja gracias XD
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.