Explications code c

Fermé
surame - 11 oct. 2007 à 11:51
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 11 nov. 2007 à 19:50
Bonjour,

J'ai trouvé le programme C ci-dessous qui permet de saisir 5 mots et de les inverser.
Il fonctionne très bien.
Mais je n'arrive pas à comprendre les lignes du code source suivantes et surtout la necessité
de la décrémentation P2--.

/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */


Est ce quelqu'un peut m'éclairer sur ce point?

Merci.

/* Programme complet */
/*** Ce programme permet de saisir 5 mots et de les inverser ***/

include <stdio.h>
main()
{
/* Déclarations */
char TABCH[5][51];/* tableau de chaînes de caractères */
char AIDE; /* pour la permutation des caractères */
char *P1, *P2; /* pointeurs d'aide */
int I; /* indice courant */

/* TABCH+I est l'adresse de la I-ième chaîne du tableau */
/* Il vaut mieux convertir TABCH+I en pointeur sur char */
/* Saisie des données */
printf("Entrez 5 mots :\n");
for (I=0; I<5; I++)
{
printf("Mot %d (max.50 caractères) : ", I);
gets((char *)(TABCH+I));
}

/* Inverser l'ordre des caractères à l'intérieur des mots */
for (I=0; I<5; I++)
{
P1 = P2 = (char *)(TABCH+I);
/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */
while (P1<P2)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
P1++;
P2--;
}
}

/* Affichage des mots inversés */
for (I=0; I<5; I++)
puts((char *)(TABCH+I));
return 0;
}
A voir également:

5 réponses

Bonjour,

Rappel : en C une chaîne se termine par '\0'
La boucle while(*P2) s'arrête donc lorsque *P2 == '\0'
Si on ne recule pas le pointeur, la boucle suivante commencera donc avec '\0'...et la chaîne résultante sera interprétée comme vide.
0
Bonjour Denis

Grand Merci pour vos précisions.
0
:-)
0
Bonjour,

:)~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
11 nov. 2007 à 19:50
oui... ?
0