Warum ist 1 nicht gleich 1



  • Hallo zusammen,

    wahrscheinlich ist das jetzt eine totale super doof Frage, aber ich sehe den Fehler einfach nicht.

    Ich möchte zwei wchar_t mit einander vergleichen. Der eine ist ein Rückgabwert aus einer Datenbank der andere in fest gesetzter Wert.

    Nun tüftel ich hier die ganze Zeit rum und gucke mir beim Debuggen die Werte an.
    Aber ein L"1" und ein L"1" scheinen irgendwie nicht das gleiche zu sein.

    wchar_t* test;
    
    	test = __EXECUTE("W:$D(@%WGBL@(" + msmY + ")) 1");
    
    	wchar_t* blubb = L"1";
    	wchar_t* i= L"Ich bin 1";
    	if (test == blubb)
    	{
    		i = L"Ich bin immer noch 1";
    	}
    
    	if (wcscmp(test,blubb))
    	{
    		i = L"Ich bin immer noch 1";
    	}
    
            if (wcscmp(test=blubb))
    	{
    		i = L"Ich bin immer noch 1";
    	}
            if (wcscmp(test!=blubb))
    	{
    		i = L"Ich bin immer noch 1";
    	}
    

    Um zu sehen wann den die Abfrage das von mir gewünschte Ergebnis bringt habe ich diese kleinen Test ifs zusammen geschmissen.

    Nur bei einem einfachen = komme ich in die If Abfrage rein.
    Eigentlich soll die Abfrage später in einer While Schleife die Ausstiegsbedingung geben, was im Moment aber nur eine hübsche Endlosschleife gibt.Und die einfach = Abfrage nimmt die While Schleife nicht.



  • Du vergleichst Zeiger, nicht das, worauf gezeigt wird.



  • 1 ist etwas anderes als '1' ist was ganz anderes als "1"
    "1" ist ein Stringliteral, von dem du die Anfangsadresse bekommst.

    Du musst also strcmp bemühen (bzw. die wchar -Version davon)



  • Ich habe jetzt nochmal

    if (&test == &blubb)
    	{
    		i = L"Ich bin immer noch 1";
    	}
    

    und

    if (wcscmp(test,blubb))
    	{ 
    		i = L"Ich bin immer noch 1";
    	}
    

    probiert. Aber beides mal ist L"1" nicht gleich L"1" und in der Schleife die mal so Aussah

    while (!__EXECUTE("W:$D(@%WGBL@(" + msmY + ")) 1")==NULL)
    

    Stimmt überhaupt nix mehr zusammen. Den Null kommt nun wirklich nie zurück soweit ich das sehen kann.



  • Guck mal, was wscmp zurückgibt. Ansonsten würde man in C++ eh nicht auf solche konstrukte zurückgreifen, sondern entsprechenden stringklassen benutzen.



  • Du schreibst wirres Zeug.

    Es fängst schon damit an, dass wcscmp zwei Parameter nimmt, du aber in deinem Code nur einen übergibst:

    if (wcscmp(test=blubb))
        {
            i = L"Ich bin immer noch 1";
        }
            if (wcscmp(test!=blubb))
        {
            i = L"Ich bin immer noch 1";
        }
    

    Aus deiner Fehlerbeschreibung, insbesondere sowas wie "Stimmt überhaupt nix mehr zusammen" wird auch nichts klar.

    Mach am besten ein kleines vollständiges und kompilierbares Beispielprogramm, das deinen Fehler zeigt.



  • @ Valyse
    Nur um es nochmal hervorzuheben, das:

    Techel schrieb:

    Guck mal, was wscmp zurückgibt.

    wird dein Problem lösen.
    (Vorausgesetzt du kannst aufmerksam Lesen ;))


Log in to reply