elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  basura al final de cadena
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: basura al final de cadena  (Leído 1,770 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
basura al final de cadena
« en: 30 Octubre 2015, 18:41 pm »

Código
  1. void escribe()
  2. {
  3. FILE *a = NULL;
  4. a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "ab");
  5. u_char *o = (u_char*)"BUENOS DIASSS";
  6. fwrite(o, sizeof(u_char), strlen("BUENOS DIASSS"), a);
  7. fclose(a);
  8. a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "rb");
  9. fseek(a, 0, SEEK_END);
  10. int c = ftell(a);
  11. cout << c;
  12. fseek(a, 0, SEEK_SET);
  13. u_char *d = new u_char[c]();
  14. fread(d, sizeof(u_char), c, a);
  15. cout << (char*)d;
  16. fclose(a);
  17. }

Llamo a esta funcion 6 veces, salida:

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

Y cada vez va saliendo más.


« Última modificación: 30 Octubre 2015, 18:43 pm por Kaxperday » En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: basura al final de cadena
« Respuesta #1 en: 30 Octubre 2015, 18:51 pm »

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


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: basura al final de cadena
« Respuesta #2 en: 30 Octubre 2015, 18:58 pm »

Código
  1. FILE *a = NULL;
  2. a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "ab");
  3. u_char *o = (u_char*)"BUENOS DIASSS\0";
  4. fwrite(o, sizeof(u_char), strlen("BUENOS DIASSS\0"), a);
  5. fclose(a);
  6. a = fopen("C:\\Users\\Usuario\\Desktop\\PRUEBA.txt", "rb");
  7. fseek(a, 0, SEEK_END);
  8. int c = ftell(a);
  9. cout << c;
  10. fseek(a, 0, SEEK_SET);
  11. u_char *d = new u_char[c]();
  12. fread(d, sizeof(u_char), c, a);
  13. cout << (char*)d;
  14. fclose(a);

Código
  1. BUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSSBUENOS DIASSS²²²²

En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: basura al final de cadena
« Respuesta #3 en: 30 Octubre 2015, 21:04 pm »

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
  1. cout << (char*)d;
¿Cómo sabe ostream::operator<< la longitud de la cadena apuntada por d?
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: basura al final de cadena
« Respuesta #4 en: 30 Octubre 2015, 21:34 pm »

Ahhh ok entendí mal jaja gracias XD
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines