[C] implémentation correcte ?

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

  1. 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
    1. 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
      1. 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
        1. 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