Je travaille actuellement sur une bibliothèque écrite en C. De nombreuses fonctions de cette bibliothèque attendent une chaîne au fur char*
et const char*
à mesure de leurs arguments. J'ai commencé avec ces fonctions en m'attendant toujours à la longueur de la chaîne size_t
afin que la terminaison nulle ne soit pas requise. Cependant, lors de l'écriture des tests, cela a entraîné une utilisation fréquente de strlen()
, comme ceci:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Faire confiance à l'utilisateur pour passer des chaînes correctement terminées conduirait à un code moins sûr, mais plus concis et (à mon avis) lisible:
libFunction("I hope there's a null-terminator there!");
Alors, quelle est la pratique raisonnable ici? Rendre l'API plus compliquée à utiliser, mais forcer l'utilisateur à penser à son entrée, ou documenter l'exigence d'une chaîne terminée par un caractère nul et faire confiance à l'appelant?
CreateFile
prend unLPTCSTR lpFileName
paramètre en entrée. Aucune longueur de la chaîne n'est attendue de l'appelant. En fait, l'utilisation de chaînes terminées par NUL est tellement ancrée que la documentation ne mentionne même pas que le nom de fichier doit être terminé par NUL (mais bien sûr il doit l'être).