Fonction *char

Signaler
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
-
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
-
Bonjour,

Je suis en train de faire évoluer une appli qui a pas de paramétrage à sortir de l'appli. Tout est codé en dir et ça craint assez (ex : strcpy(st,"c:\winnt") ).
Il ya également une bonne trentaine de message d'erreur qui doivent devenir paramétrable dans un fichier INI. Ces messages sont actuellement affiché par messagebox.

J'ai codé une fonction qui retourne un pointeur *char. J'ai lu pas mal de choses sur le forum, il m'a semblé que finallement ce n'était pas la meilleure solution... Je vous la présente quand même :

numerreur : le numéro d'erreur dans fichier INI
defmessage : message par défaut à afficher si jamais pb avec fichier INI.

char *ErrMessage(char *numerreur, char *defmessage)
{
int retour;
retour=GetPrivateProfileString("MESSAGE",numerreur,"",m_erreurmessage ,sizeof(m_erreurmessage ),pathini);
if(retour==0) strcpy(m_erreurmessage ,defmessage);
return m_erreurmessage ;
}

m_erreurmessage est déclarée "tout en haut" du fichier, donc accessible de partout (je me trompe pas là ?)

Y-a-t il des risques que ça plante méchament comme ça ?

Merci

Moustachu

3 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
non si ta variable est globale il n'y a aucun risque. Le prblème se pose quand on veut retourner un tableau déclaré dans la fonction, qui est donc détruit à la sortie de la fonction, mais ici ce n'est pas le cas.
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
moi je comprends pas la logique, tu fais une fonction qui retourne quelque chose qui est connu
pourquoi ne pas faire une fonction void, qui ne retourne rien, et utiliser m_erreurmessage directement puisqu'il est accessible de n'importe ou ?

le seul interet je trouve est de pouvoir utiliser le retour avec un pointeur, mais bon avoir :
char * pErreur = ErrMessage(...);
ou plutot
ErrMessage(...);
char *pErreur = m_erreurmessage;
en général, quand une fonction retourne un pointeur, il a été alloué dans la fonction, soit :
char * maFunc(...)
{
char *retour = new char[TAILLE+1];
strcpy(...);
return retour;
Enfin, après, si tu te mélanges pas dans les pointeurs, ca devrait marcher
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Merci de vos réponses,

>>hilairenicolas : c'est vrai que je n'avais pas vu ça comme ça... C'est surrement plus propre. En fait, c'était pour ne pas trop changer le code existant qui est assez dense par endroit.
J'utilise parfois la fonction comme ça

If(condition) MessageBox(0,ErrMessage("01","blabla"),"Erreur",0);

Voilà,

Merci encore, je ne suis pas un pro en C donc tous les conseils sont les bienvenus, je dois porter un vieux code (win3.11) vers XP, et c'est pas drôle tous les jours :op

++
moustachu