[c] chaine de caractère en retour d'une fonct
laetitia
-
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- [c] chaine de caractère en retour d'une fonct
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
2 réponses
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
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
Il y aura un petit soucis avec ça:
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):
Attention! Ne pas oublier de libérer cette zone memoire avec free plus tard!
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!