Evaluation d'expression dans un while.
Bonjour,
Voici mon problème, pour le cours de C, on nous a demandé de créer un fonction qui copie une chaîne de caractères dans une autre; une strcpy-like, j'ai fait ceci:
Code:
1 2 3 4 5 6 7 8 9
|
#include<stdio.h>
void pstrcpy (char *ch2, char *ch1)
{
while (*ch1)
*ch2++ = *ch1++;
*ch2 = '\0';
} |
ok, pas de soucis, tant que ce qui est pointé par ch1 est différent de '\0', on affecte à ch2, dès que *ch1 =\0, le traitement s'arrête, ch2 a reçu le dernier caractère mais pas celui de fin de chaîne, donc on le rajoute.
Au cours on a eu cette correction, version compacte:
Code:
1 2 3 4 5 6 7
|
#include<stdio.h>
void pstrcpy2 (char *ch2, char *ch1)
{
while(*ch2++ = *ch1++); // à la sortie de la boucle, les pointeurs sont après les derniers traités
} |
J'ai un problème avec cette écriture, pour savoir dans quel ordre est évaluée cette expression...
Lorsque la condition passe à FALSE les pointeurs sont après les \0 respectif (chaîne 1 et 2), cela veut dire que l'ordre s' est fait comme ceci: 1°) affectation, 2°) incrémentation, 3°) évaluation de la condition.
Or, dans un while, c'est la condition qui est évaluée en premier (logique pour savoir s' il y a traitement ou non)... et cela soulève une autre question, comment est évaluée la condition?
Est-ce équivalent à: while((*ch2++ = *ch1++)!='\0'); ?
Comment les pointeurs se retrouvent-ils après \0 ?
Comprends pas... :triste:
Merci de pouvoir m' éclairer.