Frage

Ich habe ein Zeichen-Array, und ich versuche, herauszufinden, ob es sich um ein Zeichenfolgenliteral, zum Beispiel entspricht:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}

Dies führte zu dem folgenden Fehler: Vergleich mit Stringliteral führt zu undefiniertem Verhalten. Ich habe auch versucht, so etwas wie:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}

Dies brachte keine Compiler-Fehler, aber es verhält sich nicht wie erwartet.

War es hilfreich?

Lösung

std::strcmp 0 zurück, wenn Strings gleich sind.

Andere Tipps

Überprüfen Sie die Dokumentation für strcmp. . Hinweis: es ist kein boolean Wert zurück

ETA: == funktioniert nicht im Allgemeinen, weil cstr1 == cstr2 vergleicht Zeiger , so dass ein Vergleich nur wahr ist, wenn cstr1 und cstr2 auf den gleichen Speicherplatz, auch wenn sie beide vorkommen beziehen sich auf Strings, die lexikographisch gleich sind. Was Du versuchen (eine cstring zu einem wörtlichen Vergleich, zum Beispiel cstr == "yes") insbesondere wird nicht funktionieren, weil der Standard es nicht erforderlich zu. In einer angemessenen Umsetzung bezweifle ich, es würde explodieren, aber cstr == "yes" ist unwahrscheinlich, dass jemals gelingen, weil cstr unwahrscheinlich ist, an die Adresse beziehen, die die String-Konstante "yes" lebt.

strcmp liefert einen Tri-State-Wert, um anzuzeigen, was die relative Reihenfolge der beiden Strings sind. Wenn Sie einen Anruf wie strcmp machen (a, b), die Funktion zurück

  • ein Wert <0, wenn a
  • 0, wenn a == b
  • ein Wert> 0, wenn a> b
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top