Fonction qui renvoie une chaine de caractère

cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006 - 21 juin 2005 à 15:19
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 21 juin 2005 à 17:41
Bonjour,

Je voudrais faire une fonction qui renvoie une chaine de caractère. C'est possible ?
Si oui comment ?

Merci

Tintin 72

12 réponses

bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
21 juin 2005 à 15:38
typeParametreDeSortie NomDeLaFonction(parametresDEntrees)
{
return variableDuTypeParametreDeSortie;
}
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 juin 2005 à 15:38
Au lieu de renvoyer un int ou rien du tout, tu renvois un char*
Donc ta fonction doit être comme ça en gros:

char* NomFonc( type arg1, ... )
{
char *Buff = new char[256];

return Buff;
delete[] Buff;
}
Je suis pas trop sur pour le delete mé normalement c'est ça,
c'est bien si c'est on va me reprendre ;)

void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 juin 2005 à 15:39
Oups :) Pour une poignée de seconde baby :) lol


void Aurevoir( void ); //Bonne journée
0
bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
21 juin 2005 à 15:44
en C
pour liberer la memoire allouée c'est :
free(nomDeLaVariable)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 juin 2005 à 15:50
Ouai mé si tu utilise new, faut utiliser delete
free c'est bon pour malloc...


void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 juin 2005 à 15:51
et new + delete c'est only C++, il faut nécessairement que j'oublie une chose dans chaque message. ça devient lassant


void Aurevoir( void ); //Bonne journée
0
bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
21 juin 2005 à 15:51
et pour l`allocation fo ecrire :
char * buff = malloc(taille*sizeof(char));
voila un tutoriel sur les pointeurs en C et C++:
http://chgi.developpez.com/pointeur/
0
bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
21 juin 2005 à 15:55
lol :)
on oubli tj qqch
souvent un petit truc a la con
++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
21 juin 2005 à 16:20
salut,

si tu fais ca:



char* NomFonc( type arg1, ... )

{

char *Buff = new char[256];



return Buff;

delete[] Buff;

}



tu peux etre sur que la mémoire ne sera jamais liberée.

si tu fais du C, une solution est de déclarer le tableau de char
que tu renvoies en static (uniquement s'il est de taille constante ou
bornée)



char* NomFonc( type arg1, ... )


{

static char ret[256];

// remplir ret ...




return ret;


}



sinon, tu es obliger de te taper la désallocation dans la fonction appelante:




char* NomFonc( type arg1, ... )



{

char* ret = (char*)malloc( taille );


// remplir ret ...


return ret;



}



int main()

{
char* chaine = NomFonc( ....);
// utiliser chaine


// et le desallouer
free(chaine);


return 0;

}





si tu fais du C++ :

#include <string>

using namespace std;

string NomFonc(type arg1, ...)

{



// ici ca renvoie salut, tu peux faire ce que tu veux en fait ...

return string("salut");

}





a+
0
cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006
21 juin 2005 à 16:39
Merci pour ces infos
Mais je crois qu'il y a un pb avec delete[] Buff;
Si cet appel a lieu aprés return il ne sera pas exécuté puisque return est le moment ou la fonction rend la main au système. A moins qu'il y ait une gestion spéciale de delete avec le compilo mais je crois pas.

Tintin 72
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 juin 2005 à 17:30
Justement c'est ce qui me faisait peur pour le delete...
Si on le met avant le return, il va rien retourner :)
Si on le met apres, il peut ne pas le prendre en compte,

Selon cosmobob, marchera pas donc :) marche pas lol ;)


void Aurevoir( void ); //Bonne journée
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juin 2005 à 17:41
Il faut mieux (à mon avis) laisser à l'appelant le soin d'allouer la
chaine de caractères, et la passer en paramètre de la fonction. Ainsi,
on peut la modifier sans problème de retour...


Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
Rejoignez-nous