[C] implémentation correcte ?

Fermé
toto - 4 mai 2007 à 10:11
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 - 4 mai 2007 à 17:02
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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
4 mai 2007 à 10:20
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
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
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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
4 mai 2007 à 17:02
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