If Vergleich nach strtok() funktioniert nicht

The_Rave

Mitglied
Ich hab einen Kommandozeilenparser der mit der Funktion strtok() einen Vergleich mit den einzelnen gefundenen Ergebnissen durchführen soll.

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char delims[] = "-";
    char *lpCmdLine = "-Hallo";
    char *result = NULL;

    result = strtok( lpCmdLine, delims );
  
    if (result != NULL)
   {
     while( result != NULL )
            {          
             if (result == "Hallo") cout<<"Beispiel2: Hallo gefunden!\n"<<endl;
             if (*result == 'H') cout<<"Beispiel2: H gefunden!\n"<<endl;

             result = strtok( NULL, delims );
            };//while ende
   }//if result ende 
    system("PAUSE");
    return EXIT_SUCCESS;
}

Im Debugger sieht alles schön aus, d.h. unter result steht mein Einzelstring. Allerdings scheint es so zu sein, daß aus irgendeinem Grund ein Vergleich nicht möglich ist. Jedenfalls funktioniert die Zeile:

if (result == "Hallo") cout<<"Beispiel2: Hallo gefunden!\n"<<endl; nicht. Weiß jemand warum das so ist und wie ich das umgehen kann?
 
Hi,
dein result ist ein Zeiger auf eine Zeichenkette.
Dein if würde also so aussehn:

Code:
if( 0x170A02 == "Hallo" )....

Wenn du Zeichenketten vergleichen willst solltest du das
mit der Funktion strcmp tun. ;)

Benny
 
Ja dann hab ich nur noch ein Problem, warum funktioniert denn das hier:

Code:
char *mytest="hallo";
if (mytest=="hallo") cout<<"mytest: Hallo gefunden!\n"<<endl;

Ist mytest hier kein Zeiger auf eine Zeichenkette?
 
Hallo,
Ja dann hab ich nur noch ein Problem, warum funktioniert denn das hier:

Code:
char *mytest="hallo";
if (mytest=="hallo") cout<<"mytest: Hallo gefunden!\n"<<endl;

Ist mytest hier kein Zeiger auf eine Zeichenkette?

Das Phänomen was du da beobachtest ist AFAIK Compilerabhägig. Will heißen:
Das Literal "Hallo" ist eine unveränderliche Konstante die im Textsegment des HSP vom Compiler abgelegt wird. Deshalb kann der Compiler das optimieren und zwei String Literale mit gleichen Wert an der selben Adresse im Textsegment ablegen, d.h es existiert nur noch ein "Hallo" im Programm. Das ist auch der Grund warum bei deinem Vergleich true raus kommt, an der Tatsache das du da einen Adressvergleich machst ändert es dennoch nichts.

Gruß,
RedWing
 
Zuletzt bearbeitet:
Zurück