Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error al comparar cadenas

Estas en el tema de Error al comparar cadenas en el foro de C/C++ en Foros del Web. Necesito comprobar si un determinado archivo es un rar, lo que hago es comprobar si tiene la firma que tiene todo archivo Rar: "Rar!" @import ...
  #1 (permalink)  
Antiguo 26/01/2013, 04:20
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 10 meses
Puntos: 28
Error al comparar cadenas

Necesito comprobar si un determinado archivo es un rar, lo que hago es comprobar si tiene la firma que tiene todo archivo Rar: "Rar!"

Código C++:
Ver original
  1. bool Rar_File_Mising::ComprobarFormato()
  2. {
  3.     if (!Lectura.is_open())
  4.          throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
  5.  
  6.     char* Leer = new char[4];
  7.  
  8.     Lectura.read(Leer,4);
  9.    // cout<<"Cosa:"<<Leer[0]<<Leer[1]<<Leer[2]<<Leer[3];
  10.  
  11.     if (strcmp(Leer,"Rar!") == 0)
  12.     {
  13.         delete[] Leer;
  14.  
  15.         return true;
  16.     }
  17.     else
  18.     {
  19.         delete[] Leer;
  20.  
  21.         return false;
  22.     }
  23. }

El problema esque cuando abro un archivo real. Siempre me lo detecta como falso, es como si no quisiera leer >_>
  #2 (permalink)  
Antiguo 26/01/2013, 06:22
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Error al comparar cadenas

Recuerda que las cadenas en C deben terminar con el carácter '\0', por eso strcmp falla con tu cadena:

Código C++:
Ver original
  1. char* Leer = new char[5];
  2. Lectura.read(Leer,4);
  3. Leer[5] = '\0';

Otra opción que puedes utilizar para no reservar memoria:

Código C++:
Ver original
  1. char Leer[5] = {0};
  2. Lectura.read(Leer,4);

Saludos.
  #3 (permalink)  
Antiguo 26/01/2013, 07:00
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 10 meses
Puntos: 28
Respuesta: Error al comparar cadenas

¡Mano de santo Hoygan! Muchas gracias ^^

Etiquetas: cadenas, fichero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:42.