Saat ini saya sedang mengerjakan perpustakaan yang ditulis dalam C. Banyak fungsi perpustakaan ini mengharapkan string sebagai char*
atau const char*
dalam argumen mereka. Saya mulai dengan fungsi-fungsi itu selalu mengharapkan panjang string size_t
sehingga null-termination tidak diperlukan. Namun, saat menulis tes, ini mengakibatkan sering digunakan strlen()
, seperti:
const char* string = "Ugh, strlen is tedious";
libFunction(string, strlen(string));
Memercayai pengguna untuk mengirimkan string yang diakhiri dengan benar akan menyebabkan kode menjadi kurang aman, tetapi lebih ringkas dan (menurut saya):
libFunction("I hope there's a null-terminator there!");
Jadi, apa praktik yang masuk akal di sini? Membuat API lebih rumit untuk digunakan, tetapi memaksa pengguna untuk memikirkan input mereka, atau mendokumentasikan persyaratan untuk string yang diakhiri dengan nol dan mempercayai penelepon?
CreateFile
mengambilLPTCSTR lpFileName
parameter sebagai input. Panjang string tidak diharapkan dari penelepon. Bahkan, penggunaan string yang diakhiri dengan NUL begitu mendarah daging sehingga dokumentasi bahkan tidak menyebutkan bahwa nama file harus diakhiri dengan NUL (tapi tentu saja harus).