Return char ? [Résolu]

Signaler
Messages postés
17
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
2 décembre 2007
-
Messages postés
17
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
2 décembre 2007
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Justement parce que ça retourne un pointeur.

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


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

{

    char *c = buffer;

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

    *c = 0;

    return buffer;

}

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
17
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
2 décembre 2007

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)
Messages postés
17
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
2 décembre 2007

merci bien, je vais travailler la dessus