Question

J'ai un tableau de caractères et j'essaie de déterminer s'il correspond à un littéral de chaîne, par exemple:

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

Cela a entraîné l'erreur suivante: la comparaison avec le littéral de chaîne entraîne un comportement non spécifié. J'ai aussi essayé quelque chose comme:

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

Cela n'a généré aucune erreur de compilation, mais il ne se comporte pas comme prévu.

Était-ce utile?

La solution

std::strcmp renvoie 0 si les chaînes sont égales.

Autres conseils

Consultez la documentation de strcmp. Astuce: il ne renvoie pas de valeur booléenne.

ETA: == ne fonctionne pas en général car cstr1 == cstr2 compare les pointeurs , de sorte que la comparaison ne sera vraie que si cstr1 et cstr2 pointent vers le même emplacement mémoire, même s’ils se trouvent dans les deux cas, ils font référence à des chaînes égales lexicographiquement. Ce que vous avez essayé (comparer une chaîne de chaîne à une lettre, par exemple cstr == "yes"), en particulier ne fonctionnera pas, car la norme ne l'exige pas. Dans une implémentation raisonnable, je doute qu’elle explose, mais il est peu probable que cstr aboutisse, car "yes" ne renverra probablement pas l’adresse où réside la constante de chaîne <=>.

strcmp renvoie une valeur à trois états indiquant l’ordre relatif des deux chaînes. Lors d’un appel comme strcmp (a, b), la fonction retourne

  • une valeur < 0 quand un & Lt; b
  • 0 quand a == b
  • une valeur > 0 quand un & Gt; b
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top