2017-07-08 6 views
1

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

+0

Ok, quelle sera la valeur ASCII d'une chaîne? – ameyCU

+0

"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

+0

Qu'avez-vous appris par vous-même? Qu'a dit ton livre C? – Olaf

Répondre

1

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.

+0

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

+1

@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

+0

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