Problem dans la boucle while

Résolu/Fermé
aminet1 - 15 sept. 2015 à 20:26
 Utilisateur anonyme - 15 sept. 2015 à 21:25
Bonjour,
j'arrive pas a comprendre le résultat de ce code pour moi le résultat doit etre BCD et non BD et merci pour votre temps

#include <stdio.h>
int main(void) {
char *s;
s="ABCD";
while(*s++)
printf("%c",*s++);

return 0;
}



1 réponse

Bonjour

Si, le résultat est bien BD
-s pointant initialement sur A, tu testes while(*s++). s pointe maintenant sur B
- tu imprimes ce B avec printf("%c",*s++) donc tu incrémentes s : s pointe maintenant sur C
- tu testes à nouveau ta condition de bouclage while(*s++) donc tu incrémentes encore s : s pointe maintenant sur D
- tu imprimes ce D...

À chaque boucle, tu incrémentes s deux fois. C'est d'ailleurs très dangereux, tu ne testes qu'un caractère sur deux pour arrêter ta boucle et si tu avais initialisé ta chaîne avec un nombre impaire de caractères, tu passais par-dessus le caractère null de fin de chaîne et tu partais dans le décor...
1