[C] implémentation correcte ?
toto
-
Stupeflip Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Stupeflip Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Simple question : une fonction comme la suivante est-elle bien impléentée ? Je veux savoir ici si c'est correct de ne pas allouer ni libérer.
char * __ckbbool(BOOL b)
{
char *res;
if(b != 0)
{
res = "TRUE";
}
else
{
res = "FALSE";
}
return res;
}
Configuration: Windows XP Internet Explorer 6.0
4 réponses
-
Salut,
Non ce n'est effectivement pas bien implémenté pour les raisons que tu cites. Mais comme il ne peut avoir que deux valeurs possibles, ne peux-tu pas mettre une taille fixe ?char res[5];
Ou alors un malloc après le if et le else mais il ne faudra pas oublier le free après.
-
ok, sachant que je retourne ma variable res et donc pour éviter d'oubli de free je vias déclarer une taille fixe comme tu l'as proposé.
Merci pour ta réponse rapide. -
Non, c'est mal.
et l'utilisation de Res[5] ne marche pas car en dehor de ta fonction
res n'est plus accessible (a mois d'utiliser une variable globale (ce qui est à proscrire).
tu ne peut retourner de tableau avec un return.
Le mieu est le passage par parametre :
bool __MonCheck( bool b, char * Res)
{
if(b)
{
if(Res != NULL) Res = "TRUE";
return b;
}
else
{
if(Res != NULL) Res = "FALSE";
return b;
}
}
ainsi
char Résultat[10];
if(__MyCheck(bCondition,Résultat))
prinft("OK,%s",Résultat);
else
printf("NOk,%s",Résultat);
Affiche : "OK,TRUE" ou" NOK,FALSE"
et if(__MyCheck(bCondition,NULL))
ne plante pas, bien sur tu a le risque de mettre un pointeur ne disposant pas de 6 octets de mémoire pour mettre "FALSE\0" -
Je vois pas trop comment tu peux affirmer que la variable globale est à proscrire en voyant juste une fonction ... Enfin c'est comme les goto et les pointeurs, bien utilisés, c'est pas une tare, bien au contraire ...