[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. 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 ...
    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"
      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.
        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.