Şu anda C ile yazılmış bir kütüphane üzerinde çalışıyorum. Bu kütüphanenin birçok işlevi argümanlarında char*
veya const char*
argümanlarında bir dize bekliyor . Ben size_t
boş sonlandırma gerekli değildi böylece her zaman dize uzunluğunu bekliyor bu fonksiyonları ile başladı . Bununla birlikte, test yazarken, bu, aşağıdakilerin sık sık kullanılmasına neden oldu strlen()
:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Kullanıcının uygun şekilde sonlandırılmış dizeleri geçmesine güvenmek, daha az güvenli, ancak daha özlü ve (bence) okunabilir kodlara yol açacaktır:
libFunction("I hope there's a null-terminator there!");
Peki, burada mantıklı uygulama nedir? API'yi kullanımı daha karmaşık hale getirin, ancak kullanıcıyı girdilerini düşünmeye zorlayın veya boş sonlandırılmış bir dizeye gereksinimi belgelendirin ve arayan kişiye güvenin mi?
CreateFile
birLPTCSTR lpFileName
parametre girdi alır . Arayandan dize uzunluğu beklenmez. Aslında, NUL sonlandırılmış dizelerin kullanımı o kadar kökleşmiş ki, belgeler dosya adının NUL sonlandırılması gerektiğinden bile bahsetmiyor (ama elbette olmalı).