Ajouter un commentaire

jrebillat

Toutes les remarques de labofonic sont parfaitement justifiées. Laisser les fonctions modifier les éléments fournis en entrée est à éviter, surtout pour ceux qui, comme les chaines de caractères en C/C++ sont des tableaux alloués.

Toutefois, ce qui arrive ici est plus vicieux que ce qui est expliqué par labofonic.
En effet le paramètre chaine est un pointeur sur une chaine de caractère. Donc ce qui est passé par valeur, c'est le pointeur, pas la chaine !
Ce qui veut dire que tu peux changer le contenu de la chaine (par un accès direct avec chaine[i] ou des fonctions comme strcpy(). Avec une limitation de taille (jeu de mot) : attention à la longueur de la chaine à recopier, qui doit être inférieure ou alors à celle d'entrée !

Toi, tu as changé l'adresse pointée par le pointeur en le dirigeant vers une constante chaine locale à la fonction. Heureusement, le changement était uniquement local (pas dans la variable chaine du main) car sinon la zone pointée par le pointeur retourné pourrait (ça dépendra du compilateur) ne pas être valide.

Tu es tombé sur une potentialité du C à créer des bugs difficiles à résoudre. C'est pourquoi les conseils de labofonic sont à suivre.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  GGG   EEEE  DDD   U   U  Y   Y 
G E D D U U Y Y
G GG EEE D D U U Y
G G E D D U U Y
GGG EEEE DDD UUU Y