Comment fonctionne la comparaison C ++ char *?

#include  int main() { if ("zabc" < "def") { std::cout << "Less.\n"; } } 

Le code ci-dessus imprime Less. . Je sais que ce n’est pas la bonne façon de comparer les caractères en C ++, mais comment le code ci-dessus affiche-t-il Less. ?

Le code compare les adresses des deux chaînes. Formellement, il s’agit d’un comportement non spécifié, car ils ne sont pas des éléments du même tableau, mais dans ce cas, c’est probablement dire la vérité: la première chaîne a une adresse plus basse que la seconde. Mais vous ne pouvez pas compter sur ça …

Vous ne faites que comparer les adresses. Vous devez utiliser strcmp

C’est comparer des adresses. “zabc” se trouve être à une adresse inférieure à “def” pour une invocation particulière de ce code compilé par un compilateur particulier. (Il pourrait également s’agir d’une adresse plus élevée en fonction du compilateur et même, éventuellement, pour différents appels du même exécutable.)

Lorsque vous faites cela, le compilateur alloue deux tableaux de caractères, un pour “def” et un pour “zabc”. Ceci est fait au moment de la compilation.

Puisque “zabc” est défini avant “def”, votre compilateur donne probablement la première adresse à la première, bien qu’il s’agisse d’un comportement non défini. plus tard, lorsque les adresses sont comparées, “zabc” est “plus petit”. Vous devriez voir que si vous faites la suivante, vous aurez toujours “Moins” imprimé.

  if ("def" < "zabc") { std::cout << "Less.\n"; }