আমি বর্তমানে সি-তে লেখা একটি লাইব্রেরিতে কাজ করছি যা এই লাইব্রেরির অনেকগুলি ফাংশন তার যুক্তি হিসাবে 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!");
সুতরাং, এখানে বোধগম্য অনুশীলন কি? ব্যবহারের জন্য এপিআই আরও জটিল করুন, তবে ব্যবহারকারীকে তাদের ইনপুট সম্পর্কে ভাবতে বাধ্য করুন, বা নাল-টার্মিনেটেড স্ট্রিংয়ের জন্য প্রয়োজনীয় প্রয়োজনীয়তা দলিল করুন এবং কলারের উপরে বিশ্বাস করুন?
CreateFile
নেয়LPTCSTR lpFileName
। কলারের কাছ থেকে স্ট্রিংয়ের কোনও দৈর্ঘ্য আশা করা যায় না। প্রকৃতপক্ষে, NUL- টার্মিনেটেড স্ট্রিংগুলির ব্যবহার এতটাই সংক্রামিত যে ডকুমেন্টেশনে এমনকি ফাইলের নামটিও নুল-সমাপ্ত হওয়া উচিত বলে উল্লেখ করা হয়নি (তবে অবশ্যই এটি অবশ্যই হবে)।