私は現在、Cで書かれたライブラリに取り組んでいます。このライブラリの多くの関数は、引数として、char*
またはconst char*
引数に文字列が必要です。私は、文字列の長さを常に期待している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で終了する必要があることについて言及していません(もちろんそうする必要があります)。