Que se passera-t-il si j'utilise des opérateurs de comparaison pour comparer des chaînes au lieu de strcmp dans C? Va-t-il comparer sa valeur ASCII et retourner les résultats?C- Opérateur de comparaison au lieu de strcmp
Répondre
Il va comparer les adresses des deux pointeurs.
donc:
char* a = "hello";
char* b = "test";
char* c = "hello";
char* d = a;
a == d; // true
a == b; // false
a == c; // true or false, depending on the compiler's behavior.
Le troisième exemple sera vrai si le compilateur décide de recycler les données de chaîne réelle pour « bonjour », mais il n'a pas l'obligation de le faire.
Alors que vous avez raison avec la conclusion, ces exemples sont mal choisis. 'char *' n'est pas la même chose qu'un littéral de chaîne. – Olaf
@Olaf, la question concerne les chaînes à terminaison nulle, pas les chaînes de caractères. Il m'arrive d'utiliser des littéraux de chaîne parce que 1) Cela fait des exemples plus courts, 2) il expose à quel point il peut être difficile avec le regroupement de chaînes. – Frank
Une chaîne n'est toujours pas un pointeur, mais un tableau. Et une chaîne littérale sera convertie en une séquence de caractères multi-octets en phase de traduction 6 et un terminateur est ajouté en phase 7. Ils sont identiques par rapport à la sémantique des chaînes (sauf pour la mutabilité, qui n'est pas pertinente ici). – Olaf
Ok, quelle sera la valeur ASCII d'une chaîne? – ameyCU
"Va-t-il comparer sa valeur ASCII et retourner les résultats?" En supposant que vous vouliez dire "valeurs", non, c'est ce que fait "strcmp" (Si vous utilisez le jeu de caractères ascii). – George
Qu'avez-vous appris par vous-même? Qu'a dit ton livre C? – Olaf