Attualmente sto lavorando su una libreria scritta in C. Molte funzioni di questa libreria prevedono una stringa come char*
o const char*
nei loro argomenti. Ho iniziato con quelle funzioni che aspettavano sempre la lunghezza della stringa come size_t
in modo che non fosse richiesta la terminazione nulla. Tuttavia, durante la scrittura di test, questo ha comportato un uso frequente di strlen()
, in questo modo:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Affidarsi che l'utente passi stringhe correttamente terminate porterebbe a codice meno sicuro, ma più conciso e (a mio parere) leggibile:
libFunction("I hope there's a null-terminator there!");
Quindi, qual è la pratica ragionevole qui? Rendi l'API più complicata da utilizzare, ma costringi l'utente a pensare al proprio input o a documentare il requisito per una stringa con terminazione null e fidarsi del chiamante?