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 siempre esperando la longitud de la cadena size_t
para que no se requiera una terminación nula. Sin embargo, al escribir pruebas, esto resultó en el uso frecuente de strlen()
, así:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Confiar en el usuario para que pase cadenas terminadas correctamente conduciría 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í? ¿Hacer que la API sea más complicada de usar, pero obligar al usuario a pensar en su entrada o documentar el requisito de una cadena terminada en nulo y confiar en la persona que llama?
CreateFile
toma unLPTCSTR lpFileName
parámetro como entrada. No se espera ninguna longitud de la cadena de la persona que llama. De hecho, el uso de cadenas terminadas en NUL está tan arraigado que la documentación ni siquiera menciona que el nombre del archivo debe estar terminado en NUL (pero, por supuesto, debe estarlo).