Char vergleichen



  • Hallo zusammen,
    bin neu hier und Umsteiger von .NET Sprachen. Habe jetzt mal etwas rumgespielt um mich in C++ einzufinden. Da kam mir nach kurzer Zeit ein Fehler entgegen, den ich so nicht kenne. Schaut mal:

    string xStr = "Test";
    int ii = 0;
    
    if (xStr[ii] == "X") {
    //bla blub
    }
    

    Fehler: ISO-C++ verbietet Vergleich zwischen Zeiger und Ganzzahl [-fpermissive]

    Was mach ich falsch ? 😃
    Thx



  • Es muss lauten

    if (xStr[ii] == 'X')
    

    "X" ist ein String, 'X' ist ein Character.



  • "X" ist eigentlich ein String-Literal, folgernd also zuerst einmal ein char-Array.

    Dieses Array hat die Größe 2 ('X' und das Terminierungszeichen). Dank dem Array-to-Pointer decay wird daraus ein Zeiger, sobald wir es vergleichen wollen. Ein Zeiger auf das erste Element. Was du also theoretisch (!) schreiben könntest:

    if(xStr[ii] == *"X")
    

    viel einfacher ist es aber, direkt ein Character-Literal daraus zu machen, und statt double-quotes (") single-quotes (') zu nehmen.


Anmelden zum Antworten