passage par référence d'une chaine de caractères ?
bonjour !
je ne sais pas si c'est exactement ça !
mais je souhaite modifier la valeur d'une chaîne de caractère et que cette modification ce répercute à ma variable dans la fonction appelante...
strcpy est ok, mais je veux savoir comment passer ma chaine à NULL.
c'est un passage par réf q'il me faut ? (si oui comment faire (svp / merci) ?), ou tous les passage de chaine de car se font automatiquement par ref vu que ce sont des pointeurs ?
merci d'avance
skotea
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
int modifie(char* test) {
//strcpy(test, "prout");
test = NULL;
return(EXIT_SUCCESS);
}
int main(int argc, char **argv) {
char *test;
if(!(test = (char *)malloc(256 * sizeof(char)))) {
printf ("ERREUR : erreur d'allocation de memoire\n");
return(EXIT_FAILURE);
}
strcpy(test, "ceci est un test");
printf("test=%s\n", test);
modifie(test);
printf("modifie(test)=%s\n", test);
return(EXIT_SUCCESS);
} |
ça m'affiche :
Code:
1 2 3
|
test=ceci est un test
test=ceci est un test |
:(
Re: passage par référence d'une chaine de caractères ?
Bonjour,
d'après le code que tu as posté, tu souhaite modifier l'adresse de la chaîne de caractères stockée dans la variable test. Donc pour modifier une variable au travers une fonction, il faut lui passer son adresse en paramètre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
int modifie(char** test) {
*test = NULL;
return(EXIT_SUCCESS);
}
int main(int argc, char **argv) {
...
modifie(&test);
...
} |
Quelques conseilles : - Bien utiliser malloc()
- Et comme tu modifie la valeur de test qui provient du retour de malloc, il ne faut pas oublier de libérer la mémoire avant.
Code:
printf("modifie(test)=%s\n", test);
avec test valant NULL produit surement un comportement indéfini- La valeur de retour de la fonction modifie n'est d'aucune utilité dans cet exemple