lundi 20 janvier 2014

Concours de commentaires!


Ceux qui ont subi mes TP savent que j'aime bien relever des petits casse-tête de debug en C. Au cours de mes promenades, j'ai trouvé une jolie pépite. Fort classique mais tellement élégamment tournée... J'en rigole encore. Du coup, j'en ai fait une version avec des commentaires à la mesure du code, du moins je l'espère. 

Voilà le code initial:

char * printStringInBuffer (char * fmt, va_list pa)
{
   char * res;
   res = (char *)calloc(MAX_STRING_LENGTH, sizeof(char));
   if (res == NULL)

       return NULL;
   if (vsprintf(res, fmt, pa) >= MAX_STRING_LENGTH) {   
       res[MAX_STRING_LENGTH-1] ='\0';
       return NULL;
   }
  
return res;
}

Voilà le code avec mes commentaires
char * printStringInBuffer (char * fmt, va_list pa)

{
   char * res;
   res = (char *)calloc(MAX_STRING_LENGTH, sizeof(char));
   if (res == NULL)
       return NULL;
   if (vsprintf(res, fmt, pa) >= MAX_STRING_LENGTH) {
       /* Oups, j'ai bavé.... ça fait pas propre,
          essuyons la tâche! */
       res[MAX_STRING_LENGTH-1] ='\0'; /* Ah, là ça déborde plus! */
       /* Ah oui, mais après le buffer on voit 
        * encore mes traces. Euh, bon allez, je 
        * me casse en sifflotant, l'air de rien 
        * Suis jamais passé ici, moi. */
       return NULL;
       /* Et hop, ni vu ni connu! Celui qui trouvera 
        * que c'est moi qui ai cassé le tas, et fait 
        * une fuite mémoire sera bien malin!
        * En fait un free aurait aussi été très futé 
        * pour brouiller les pistes,
        * mais ça faisait
un bug en moins! */
   }
  
return res;
}

Quels commentaires auriez-vous mis?
LeFA

 

2 commentaires:

  1. Non moi je trouve que tu as fait preuve de beaucoup de réalisme, difficile de faire mieux!

    RépondreSupprimer
  2. calloc(...)
    /* J'alloue de la mémoire et l'initialise à 0 pour bien l'activer avant d'écrire dedans */

    RépondreSupprimer