[C] implémentation correcte ?

toto -  
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;
}

4 réponses

Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
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.
0
toto
 
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.
0
Sylvanus
 
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"
0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
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 ...
0