我目前正在使用C语言编写的库。该库的许多功能都希望在其参数中包含char*
或字符串const char*
。我从那些函数开始就一直期望字符串的长度为a,size_t
这样就不需要空终止。但是,在编写测试时,这导致频繁使用strlen()
,例如:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
信任用户传递正确终止的字符串将导致安全性降低,但更为简洁和(在我看来)可读的代码:
libFunction("I hope there's a null-terminator there!");
那么,这里的明智做法是什么?使API使用起来更加复杂,但会迫使用户考虑他们的输入,或者记录对以空值结尾的字符串的需求并信任调用者?
CreateFile
将LPTCSTR lpFileName
参数作为输入。调用者不应期望该字符串的长度。实际上,以NUL终止的字符串的使用是如此根深蒂固,以至于文档甚至都没有提到文件名必须以NUL终止(但必须是)。