n est une variable locale de la fonction
EgalCh.
ChercheCh lui envoie la valeur de la variable
Lg à chaque appel ; cette variable n'est calculé qu'une fois, ici :
Par conséquent,
n vaut toujours la même valeur à chaque fois qu'on entre dans
EgalCh, c'est à dire la valeur de
Lg.
Je ne comprends donc pas ta question.
Par la suite Lg devient le paramètre n de EgalCh lors de sa déclaration.
Pour que le code fonctionne le code suivant de la fonction EgalCh :
while ( --n && *Ch1 == *Ch2 )
doit faire en sorte que la valeur n soit la valeur de l'appel précédent dans le cas contraire, il y aura toujours la même comparaison sur les même lettres.
Par contre, il y a un bug dans ton code. En effet, imagine que le mot à chercher n'existe pas. La boucle
while ( *Ch2 && !EgalCh(Lg, Ch1, Ch2) )
est donc susceptible de faire planter
EgalCh, en lui faisant lire un accès mémoire situé en dehors du tableau
Txt2 (via le pointeur
Ch2), au cas où la taille additionnée des deux chaînes dépasse 50 (valeur que tu as fixé pour la taille du second tableau).
Et il y a aussi une chose qui ne va pas. Si tu as un seul caractère à trouver dans la phrase, la boucle
while ( --n && *Ch1 == *Ch2 )
ne sera même pas parcourue. Il faut décrémenter non pas avant mais après l'évaluation des conditions. Si
n vaut un, la boucle doit être parcourue une fois. S'il vaut deux, elle doit être parcourue deux fois. Etc. Or, là, on diminue d'office un caractère au mot à rechercher.
Il faudrait plutôt remplacer par
while ( n-- && *Ch1 == *Ch2 )
Je suis qu'à moitié d'accord avec n-- :
car fgets comptabilise '\n' dans la longueur de la chaine mémorisée. Si '\n' compte comme un caractère, il n'est pas utile de rechercher à le comparer avec le début de l'autre chaîne de caractères.
Je te conseille aussi de faire en sorte que
ChercheCh retourne NULL si le mot à chercher n'est pas trouvé.
Partager