Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Drakomorh en 24 Mayo 2011, 23:35 pm



Título: [?] cambiar una comparacion de const char * a metodo string.compare
Publicado por: Drakomorh en 24 Mayo 2011, 23:35 pm
Hola amigos:

Como puedo pasar de cosnt char* string y poder hacer la siguiente parte del codigo:

Original:
Código
  1. // Mostramos en que canal esta el ap:
  2. const char * macs = ssh.getReceivedText(channelNum,"ansi");
  3.    if (macs == 0 ) {
  4. parametros->error=1;
  5. parametros->errormsg = const_cast<char*> (ssh.lastErrorText());
  6.         pthread_exit(NULL);
  7. return NULL;
  8.    }

y ahora quiero usar la clase string tal que...
Código
  1. // Mostramos en que canal esta el ap:
  2. string macs = ssh.getReceivedText(channelNum,"ansi");
  3.    if (macs.compare("0")) {
  4. parametros->error=1;
  5. parametros->errormsg = const_cast<char*> (ssh.lastErrorText());
  6.         pthread_exit(NULL);
  7. return NULL;
  8.    }

la aplicacion sigue funcionando, pero siempre entra en el if.

A alguien se le ocurro como tengo que hacer la comparacion¿?

Gracias y un saludo.


Título: Re: [?] cambiar una comparacion de const char * a metodo string.compare
Publicado por: Drakomorh en 24 Mayo 2011, 23:50 pm
Hola amigos:

He probado a usar :

Código
  1. // Mostramos en que canal esta el ap:
  2. string macs = ssh.getReceivedText(channelNum,"ansi");
  3.    if (const_cast<char*>(macs.c_str()) ==0) {
  4. parametros->error=1;
  5. parametros->errormsg = const_cast<char*> (ssh.lastErrorText());
  6.         pthread_exit(NULL);
  7. return NULL;
  8.    }
  9.  


Ahora ya no entra siempre en el if, pero no se me ocurre como probar si llegado el momento entrara...

Gracias y  un saludo.


Título: Re: [?] cambiar una comparacion de const char * a metodo string.compare
Publicado por: Littlehorse en 25 Mayo 2011, 18:58 pm
Ten en cuenta que no es lo mismo comparar si el objeto contiene una cadena "0" que si el contenido es 0. Puedes chequear el ejemplo de cplusplus sobre el método compare:

Código
  1. // comparing apples with apples
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int main ()
  7. {
  8.  string str1 ("green apple");
  9.  string str2 ("red apple");
  10.  
  11.  if (str1.compare(str2) != 0)
  12.    cout << str1 << " is not " << str2 << "\n";
  13.  
  14.  if (str1.compare(6,5,"apple") == 0)
  15.    cout << "still, " << str1 << " is an apple\n";
  16.  
  17.  if (str2.compare(str2.size()-5,5,"apple") == 0)
  18.    cout << "and " << str2 << " is also an apple\n";
  19.  
  20.  if (str1.compare(6,5,str2,4,5) == 0)
  21.    cout << "therefore, both are apples\n";
  22.  
  23.  return 0;
  24. }

Primero tenes que decidir si estas tratando de comparar si la cadena es o no NULL o si estas tratando de comparar si el contenido de la cadena es o no 0. Definido eso puedes proceder con la forma que corresponda.
A simple vista no es necesario usar c_str en el ejemplo que expones, pero si lo fuese, lo estas haciendo mal por lo anteriormente mencionado.

Cuidado con meter casteos "para ver si funciona" sin saber realmente el objetivo del casteo, porque a veces el asunto podria parecer que funciona pero no.

Por lo pronto si te quieres sacar la duda puedes poner un breakpoint en el if e iniciar la depuración (debug) para comprobar que contiene "macs" y que te devuelve el método compare y demás. La mayoría de los IDEs tienen opciones para poder visualizar el contenido de las variables en forma individual durante la ejecución del programa, así que busca cual es la forma de hacerlo en tu IDE. Generalmente encontraras esa opción como "Expressions" o "Watch" o algo similar.

Saludos

PD: He visto que haces mucho doble post y hasta a veces triple post. Trata de usar el botón modificar.