Ajouter un commentaire

labofonic

Dans quel langage codes-tu stp? (on dirait du C)
Je ne pratiques pas le C, mais je peux déjà te répondre du point de vue strictement algorithmique.

Ton raisonnement me semble erroné : si tu veux modifier ta chaine de caractère, quel que soit le langage ( C, PHP, javascript...), tu dois utiliser une fonction qui recevra en argument la chaîne à modifier et qui retournera en sortie la chaîne modifiée.

Ta variable "chaine" a une portée limitée à la fonction dans laquelle elle a été déclarée : main.
Lorsque main passe l'argument chaine à fonction, fonction la copie en mémoire et c'est seulement cette copie qui est modifiée.

Tu as donc passé l'argument par valeur, et non pas par référence.
Ce qui est d'ailleurs une bonne manière de procéder.

Pour que fonction modifie chaine directement, il faudrait que tu passes l'argument par référence. Au lieu de travailler sur une copie, fonction disposerait alors d'un pointeur sur l'adresse mémoire de chaine, ce qui lui permettrait de modifier directement le contenu de chaine.

Ce mécanisme serait assez dangereux : il s'apparente à l'utilisation abusive de variables globales.
Ce genre de mauvaises pratiques rend le déboggage et la maintenance malaisés : il devient difficile de suivre les traitements subis par une variable.

Les technologies objet ont généralisé l'usage de l'encapsulation : la fonction appelée travaille seulement sur une copie de la variable, et renvoie la valeur modifiée.
On trace ainsi facilement les modifications de la valeur de la variable.

Tu dois donc modifier fonction pour qu'elle renvoie la chaine modifiée.

PS : à l'avenir stp :
- précise quel langage tu utilises : ça permet de rédiger directement une correction
- utilise des noms de variables et de fonctions explicites : ici tu aurais pu utiliser maChaine et maFonction -noms génériques acceptables pour un exemple aussi simple-, ou mieux : maSaisie et ChangerSaisie
(on utilise généralement des verbes d'action pour les procédures et les fonctions).

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 U   U   SSS   DDD   RRRR   TTTTTT 
U U S D D R R TT
U U SSS D D RRRR TT
U U S D D R R TT
UUU SSSS DDD R RR TT