Fonction *char

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012 - 11 mai 2004 à 12:05
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012 - 11 mai 2004 à 15:23
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 14:26
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.
0
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
11 mai 2004 à 14:45
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
0
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
11 mai 2004 à 15:23
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
0
Rejoignez-nous