Problème de char

Résolu
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008 - 13 oct. 2006 à 15:47
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 13 oct. 2006 à 22:38
Bonjour ,

mon souci est que j'ai besoin de créé une fonction qui
renvoi une chaine de caractère créé en local , et que le résultat
renvoyé soit utilisable directement dans un sprintf. Je ne sai pas
pourquoi mais sa ne veut pas :

char * fct () {
    char toto[50];
    .
    .
    . 
    return toto;
}

voila , cela ne fonctionne pas :-(

Quelqu'un peut m'aider ?

Merci

ToToL

3 réponses

DevGizmo Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 27 février 2007 1
13 oct. 2006 à 16:03
Hi,
C'est normal ....

Explications: tu as une variable locale a ta fonction; celle ci est sur la pile de l'appel de la fonction jusqu'a ce que tu face un return. Au return de la fonction elle est detruite et donc dans la fonction appellante, tu ne recupere pas tes datas...!

Solution: tu alloue ton tableau dans la fonction, tu retourne le pointeur sur la zone allouee
et dans ta fonction appellante tu fais un free quand tu as termine ...

char *fction()
{
   char *toto = NULL;
   
   toto = (char *) malloc (<la_taille_que_tu_veux>)

   if (!toto) return NULL;
   
   return toto;


}

   }
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 oct. 2006 à 21:12
Salut,

Tu peux aussi déclarer toto en static... mais ca peut poser d'autres
problemes (tu ne pourra pas utiliser 2 fois ta fonction dans sprintf,
par exemple).
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
13 oct. 2006 à 22:38
Tu peux surtout passer ta variable en paramètre
C'est beaucoup plus propre que tous les autres trucs proposés
Au moins pas d'oubli de désallocation etc...

ULARGE_INTEGERJokyQi=QI("Joky"
0
Rejoignez-nous