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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include<stdio.h> void pstrcpy (char *ch2, char *ch1) { while (*ch1) *ch2++ = *ch1++; *ch2 = '\0'; }
Au cours on a eu cette correction, version compacte:
J'ai un problème avec cette écriture, pour savoir dans quel ordre est évaluée cette expression...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }
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...
Merci de pouvoir m' éclairer.
Partager