현재 C로 작성된 라이브러리에서 작업하고 있습니다.이 라이브러리의 많은 함수는 인수 로 char*
또는 문자열로 문자열을 기대합니다 const char*
. size_t
null 종료가 필요하지 않도록 항상 문자열의 길이를 기대하는 함수로 시작했습니다 . 그러나 테스트를 작성할 때 strlen()
다음과 같이 자주 사용되었습니다 .
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
사용자가 올바르게 종료 된 문자열을 전달하도록하면 덜 안전하지만 더 간결하고 읽기 쉬운 코드가됩니다.
libFunction("I hope there's a null-terminator there!");
그래서, 현명한 연습은 무엇입니까? API 사용을 더 복잡하게 만들지 만 사용자가 입력을 생각하거나 null로 끝나는 문자열에 대한 요구 사항을 문서화하고 호출자를 신뢰하도록 강요합니까?
CreateFile
는LPTCSTR lpFileName
매개 변수를 입력으로 사용합니다. 호출자로부터 문자열의 길이가 예상되지 않습니다. 실제로 NUL로 끝나는 문자열의 사용은 파일 이름이 NUL로 끝나야 한다고 언급 하지도 않습니다 (물론 물론이어야합니다).