[c] chaine de caractère en retour d'une fonct

Fermé
laetitia - 26 mai 2006 à 21:33
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 31 mai 2006 à 03:39
Bonjour
je souhaiterais faire une fonction dans laquelle j'ai une chaine de caractères que je voudrais renvoyée dans le menu principal. Comment puis-je faire? Quelqu'un pourrait me donner un exemple

Merci
A voir également:

2 réponses

ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
30 mai 2006 à 23:42
Bonjour,

En c pas de chaine de caractère (snif snif... :) )
tu es obligé de passer par des pointeur de caractére. On sait qu'une chaine de carcatère c'est un tableau de caractère. Or un tableau c''est aussi un pointeur (le nom d'un tableau c'est un pointeur sur son premier élément). On sait aussi qu'un caractère est représenté par un octet en mémiore (une case) d'où un petit truc sympa avec l'adresse d'un tableau et sa taille on peut savoir ce qu'il y a entre les deux bornes. Bon d'accord un petit exemple.

char * je_retourne_un_talbeau(......)
{
char montableau[100];
......
// on met par exemple le dernier élément à NULL (on rajoute élément)
montableau[taille] = NULL; // on rappelle qu'en c les tableaux commencent à 0
return montableau;
}

et pour lire le tableau ...

int i=0;
while(*(tab+i)!=Null)
{
printf("%c",tab+i);
}
printf("\n");
...
et des blabla....

Voilà, j'epsère que ça répond à ta question ...

Amicalement

Ollie314
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
31 mai 2006 à 03:39
Il y aura un petit soucis avec ça:

char * je_retourne_un_talbeau(......)
{
char montableau[100];
......

return montableau;
}


montableau pointe vers un espace local à la fonction je_retourne_un_talbeau.
Il ne faut pas oublier que les variables déclarées dans une fonction sont détruites à la fin de la fonction. On peut donc sans soucis retourner montableau qui sera l'adresse vers le tableau de caracrère défini, mais cet espace de caractère sera détruit à la fin de la fonction. L'adresse que retournera cette fonction ne sera donc plus valable. D'ailleurs votre compilateur, s'il prend soin de vous, devrait gueuler un peu s'il voit ça.

C'est le soucis avec les variables déclarées statiquement dans une fonction, un espace leur est alloué dans la pile (une zone memoire des programmes) juste le temps de l'execution de la fonction.

Pour conserver cet espace réservé au tableau après l'execution de la fonction, il faut plutôt piocher dans la memoire allouable dynamiquement. Une zone reservée dans cet espace est toujours accessible après l'execution d'une fonction.

Il faut donc passer par malloc (allocation de memoire):
char * je_retourne_un_talbeau(......)
{
char *montableau=malloc(sizeof(char) * 100);
......

return montableau;
}

Attention! Ne pas oublier de libérer cette zone memoire avec free plus tard!
0