Return char ?

Résolu
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007 - 31 janv. 2007 à 18:52
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007 - 1 févr. 2007 à 00:17
salut
j'aimerais faire un retour de fonction d'une chaine de charactères.. j'aimerais savoir la façon idéal pour le faire.. j'ai vu sur un autre site quelqu'un qui utilisait un pointeur mais se faisait dire que c'était pas une bonne façon
merci

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 janv. 2007 à 22:41
Justement parce que ça retourne un pointeur.

ciao...
BruNews, MVP VC++
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 janv. 2007 à 19:42
Exemple quelconque:


char *FillString (char *buffer, int size, char val)

{

    char *c = buffer;

    while(--size) *c++ = val;

    *c = 0;

    return buffer;

}

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 janv. 2007 à 19:54
L'important, c'est de ne jamais retourner de variable local tout
simplement parce qu'à la sortie de la fonction, elles sont détruites:


char *NePasFaire (void)

{

    char VarLocal[256]; // Sera détruit à la fin de la fonction

    return VarLocal;

}


Certain te dirons qu'il est aussi possible d'allouer la mémoire
directement dans la fonction et retourné sont pointeur mais ce n'est
pas très recommandé non-plus (sauf pour les fonctions spécifiquements
fait pour ça comme une fonction qui doit calculer certaine chose pour
allouer):

char *PasRecommande(void)

{

    char *pointeur = (char*)malloc(256); // Risque d'oublier de libérer la mémoire
                                                             // Fait un code malpropre en plus

    return pointeur;

}


En gros, l'idéal est d'allouer la mémoire avant la fonction, passer le
pointeur vers la zone mémoire en paramètre de cette même fonction et,
si nécessaire, retourné le pointeur vers cette même zone (comme dans
l'exemple du précédent post) ou retourner un pointeur sur la fin de la
chaine pour permettre un chainage directe. On libère bien sur, si il
s'agit d'allocation dynamique, après l'utilisation de la zone mémoire.

C++ (@++)<!--
0
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007
31 janv. 2007 à 22:39
merci de la réponse
j'aimerais savoir pourquoi il ya un asterisque comme sur les pointeurs devant le nom de ta fonction? (char *FillString)
0

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

Posez votre question
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007
1 févr. 2007 à 00:17
merci bien, je vais travailler la dessus
0
Rejoignez-nous