[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
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
A voir également:
- [c] chaine de caractère en retour d'une fonct
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
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
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
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
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
31 mai 2006 à 03:39
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!