pb de parametres en C...

pb de parametres en C... - C - Programmation

Marsh Posté le 16-10-2006 à 23:27:26    

Salut, je programme en C, et j'ai un probleme lors d'appel d'une fonction:
 

Code :
  1. ...
  2. char *t;
  3. if (obtenirTxt(t) == 1)
  4. {
  5. printf("\nErreur lecture texte !\n" );
  6. }
  7. else
  8. {
  9. printf("\nLecture texte:\n%s\n",t);
  10. }
  11. ...


 
qui fait appel à :
 

Code :
  1. int obtenirTxt (char *txt)
  2. {
  3. txt = obtenirTexte();
  4. printf("\nnb:%d\n",strlen(txt));
  5. if (txt == NULL) return 1;
  6. return 0;
  7. }


 
 
à l'execution j'ai ceci:
 

Citation :

nb:251
 
Lecture texte:
 


 
le probleme est donc que les caractères lu existent bien dans le sous programme, mais une fois à l'exterieur le parametre ne retourne rien.

Reply

Marsh Posté le 16-10-2006 à 23:27:26   

Reply

Marsh Posté le 17-10-2006 à 00:10:02    

ezeta a écrit :


Code :
  1. ...
  2. char *t;
  3. if (obtenirTxt(t) == 1)
  4. ...


Code :
  1. int obtenirTxt (char *txt)
  2. {
  3. txt = obtenirTexte();


le probleme est donc que les caractères lu existent bien dans le sous programme, mais une fois à l'exterieur le parametre ne retourne rien.


Problème récurrent. Modifier un paramètre ne sert à rien (en tout cas, ça ne change pas la valeur initiale de la variable, puisque le paramètre est une copie de la valeur initiale (variable locale).
 
Il faut  
- soit passer l'adresse de la variable à modifier,  

Code :
  1. f(&x);


- soit retourner une valeur et la stocker dans la variable.

Code :
  1. x = f();



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 17-10-2006 à 00:13:28    

justement, le parametre en question ici est un char* c'est donc un pointeur sur une chaine de charactere...

Reply

Marsh Posté le 17-10-2006 à 00:17:24    

ezeta a écrit :

justement, le parametre en question ici est un char* c'est donc un pointeur sur une chaine de charactere...


Et ? Quelle est la valeur que tu as passée ? Celle d'un pointeur non intialisé ? Comportement indéfini.
 
Je t'ai montré les 2 solutions. Laquelle se rapproche de la tienne ? Je dirais aucune. Donc ton code est buggé.
 
Fait ce que je te dis et ça fonctionnera.


Message édité par Emmanuel Delahaye le 17-10-2006 à 00:28:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 17-10-2006 à 00:26:08    

Tu avais raison... mais c'est un peu tordu: en effet, lorsque l'on utilise des chaine de charactere on utilise des pointeurs sur des chaines de caractere.
Donc pour passer une chaine de charactere en parametre en mise a jour, il faut passer un pointeur de pointeur: char**
... et ça marche !
 
merci ;)

Reply

Marsh Posté le 17-10-2006 à 00:29:24    

ezeta a écrit :

char**
... et ça marche !


Je suis content d'avoir réussi à te décoincer le neurone...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed