Fonction qui renvoie une chaine de caractère

Signaler
Messages postés
122
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
22 juillet 2006
-
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
-
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

Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

typeParametreDeSortie NomDeLaFonction(parametresDEntrees)
{
return variableDuTypeParametreDeSortie;
}
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Oups :) Pour une poignée de seconde baby :) lol


void Aurevoir( void ); //Bonne journée
Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

en C
pour liberer la memoire allouée c'est :
free(nomDeLaVariable)
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ouai mé si tu utilise new, faut utiliser delete
free c'est bon pour malloc...


void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

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/
Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

lol :)
on oubli tj qqch
souvent un petit truc a la con
++
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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+
Messages postés
122
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
22 juillet 2006

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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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...