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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] cambiar una comparacion de const char * a metodo string.compare
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] cambiar una comparacion de const char * a metodo string.compare  (Leído 3,528 veces)
Drakomorh

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[?] cambiar una comparacion de const char * a metodo string.compare
« 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.


« Última modificación: 24 Mayo 2011, 23:49 pm por Drakomorh » En línea

Drakomorh

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: [?] cambiar una comparacion de const char * a metodo string.compare
« Respuesta #1 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.


En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [?] cambiar una comparacion de const char * a metodo string.compare
« Respuesta #2 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.
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
comparacion de un string con char en java
Java
sauce19 9 12,727 Último mensaje 23 Agosto 2011, 17:39 pm
por someRandomCode
funcion System(const char* aString); ¿Se puede guerdar el valor de respuesta?
Programación C/C++
astinx 3 2,875 Último mensaje 26 Febrero 2012, 01:11 am
por Eternal Idol
Pasar de const char* a int
Programación C/C++
eleon 4 5,004 Último mensaje 15 Junio 2012, 16:09 pm
por durasno
Pasar tipo const char* a char « 1 2 »
Programación C/C++
jorge_hura 15 10,654 Último mensaje 25 Julio 2013, 09:50 am
por Eternal Idol
Como cambiar el tamaño de una String (Item.string)?
Ingeniería Inversa
02k0 9 6,172 Último mensaje 3 Septiembre 2015, 20:11 pm
por 02k0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines