J'ai codé:D
et quand word = 0x071DE16C "either" le test est false???Code:if( word == "either")
celui qui m'aidera sera :ccool:
Version imprimable
J'ai codé:D
et quand word = 0x071DE16C "either" le test est false???Code:if( word == "either")
celui qui m'aidera sera :ccool:
Quel est le type de word?
C'est un char*
Sur des char*, "==" compare les adresses, pas le contenu de la chaine.
Vous avez 2 fois la même chaine à 2 adresses mémoires différentes, c'est tout.
Des chaînes de caractère de type char* se comparent avec strcmp(). (ou s'il est possible que l'une ou l'autre chaîne soit un pointeur nul, écrire un wrapper qui vérifie ça d'abord, car la norme C que j'ai sous la main ne spécifie pas le comportement dans ces cas-là).
J'ai codé :
et toujours avec les mêmes valeursCode:
1
2 bool b0 = strcmp( word, "either"); if( b0)
le test retourne false
RTFM pour la 1000 fois.
http://www.cplusplus.com/reference/cstring/strcmp/
Cela ne renvoie pas un boolean mais int.
de passer d'un booleen à un int
et d'utiliser strcoll
Le choix entre strcoll() et strcmp() dépend ce que tu veux: Si tu veux tester une égalité exacte au bit près, strcmp() est ce qu'il te faut. Si tu veux quelque chose dépendant de la locale (comme un tri alphabétique qui prend en compte les accents), c'est là que tu as besoin de strcoll().
Dans tous les cas, le résultat est un int qui est supérieur à zéro si la première chaîne est strictement "supérieure" à la seconde, inférieur à zéro si c'est l'inverse, et égal à zéro si les deux chaînes sont considérées comme égales par la comparaison.
Cette convention est suivie également par .Net et Java, il n'y a que la bibliothèque standard du C++ qui utilise une autre convention (booléen qui est vrai en cas d'infériorité stricte).