Actualmente estoy trabajando en una biblioteca escrita en C. Muchas funciones de esta biblioteca esperan una cadena como char*
o const char*
en sus argumentos. Comencé con esas funciones esperando siempre la longitud de la cadena como size_t
, por lo que no se requería una terminación nula. Sin embargo, al escribir las pruebas, esto resultó en el uso frecuente de strlen()
, así:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Confiar en que el usuario pase cadenas correctamente terminadas daría lugar a un código menos seguro, pero más conciso y (en mi opinión) legible:
libFunction("I hope there's a null-terminator there!");
Entonces, ¿cuál es la práctica sensata aquí? Haga que la API sea más complicada de usar, pero ¿obliga al usuario a pensar en su entrada o documenta el requisito de una cadena terminada en nulo y confía en la persona que llama?