সব পারি স্ট্রিং একটি বিবেচনা করা অক্ষরের অ্যারে ( হ্যাঁ ), সব করতে চরিত্র অ্যারে বিবেচনা করা স্ট্রিং ( কোন )।
কেন না? এবং কেন এটি গুরুত্বপূর্ণ?
স্ট্রিংয়ের অংশ হিসাবে স্ট্রিংয়ের দৈর্ঘ্য কোথাও সংরক্ষণ করা হয়নি এবং স্ট্রিং সংজ্ঞায়িত এমন স্ট্যান্ডার্ডের রেফারেন্সের পাশাপাশি অন্যান্য উত্তরগুলির পাশাপাশি, ফ্লিপ-সাইডটি "সি লাইব্রেরি ফাংশনগুলি স্ট্রিংগুলি কীভাবে পরিচালনা করবে?"
যখন কোনও অক্ষর অ্যারে একই অক্ষর ধারণ করতে পারে তবে এটি কেবল অক্ষরের একটি অ্যারে না হয় যদি না শেষ অক্ষরটি নুল-টার্মিনেটিং অক্ষর অনুসরণ না করে । সেই নুল-টার্মিনেটিং চরিত্রটি হ'ল অক্ষরের অ্যারেটিকে স্ট্রিং হিসাবে বিবেচনা করতে (যেমন পরিচালনা করা) অনুমতি দেয়।
সি এর সমস্ত ফাংশন যা আর্গুমেন্ট হিসাবে একটি স্ট্রিং প্রত্যাশা করে অক্ষরের অনুক্রমটি বাতিল-সমাপ্ত হওয়ার প্রত্যাশা করে । কেন?
এটি সমস্ত স্ট্রিং ফাংশনগুলি যেভাবে কাজ করে তা করতে হবে। যেহেতু দৈর্ঘ্য একটি অ্যারের অংশ হিসাবে অন্তর্ভুক্ত করা হয়নি, স্ট্রিং-ফাংশন, নাল-চরিত্রের (যেমন '\0'- দশমিকের সমতুল্য 0) সন্ধান না পাওয়া পর্যন্ত অ্যারেতে স্ক্যান করুন । দেখুন হওয়া ASCII টেবিল এবং বর্ণনা । তথাপি কিনা আপনি ব্যবহার করছেন strcpy, strchr, strcspn, ইত্যাদি .. সকল স্ট্রিং ফাংশন উপর নির্ভর nul-সসীম চরিত্র উপস্থিত হচ্ছে নির্ধারণ করতে যেখানে যে পংক্তি শেষ হয়।
দুটি অনুরূপ ক্রিয়াকলাপের তুলনা নুল-সমাপ্তি চরিত্রের string.hগুরুত্বকে জোর দেবে । উদাহরণস্বরূপ নিন:
char *strcpy(char *dest, const char *src);
strcpyফাংশন কেবল কপি থেকে বাইট srcথেকে destপর্যন্ত nul-সসীম চরিত্র পাওয়া যায় বলার strcpyযেখানে অক্ষর অনুলিপি থামাতে। এখন অনুরূপ ফাংশন নিন memcpy:
void *memcpy(void *dest, const void *src, size_t n);
ফাংশনটি একই ক্রিয়াকলাপ সম্পাদন করে তবে srcপ্যারামিটারটিকে স্ট্রিং হিসাবে বিবেচনা করে না বা প্রয়োজন হয় না । যেহেতু নুল-টার্মিনেটিং চরিত্রটি না পাওয়া পর্যন্ত memcpyকেবল srcঅনুলিপি করে বাইটগুলি অনুলিপি করতে পারে destনা , তৃতীয় প্যারামিটার হিসাবে অনুলিপি করার জন্য এটি স্পষ্ট সংখ্যক বাইটের প্রয়োজন। এই তৃতীয় প্যারামিটার একই আকারের তথ্য সরবরাহ করে কেবল কোনও নুল-টার্মিনেটিং চরিত্র না পাওয়া পর্যন্ত সামনে স্ক্যান করে সহজেই উত্পন্ন করতে সক্ষম হয় ।memcpystrcpy
(যা strcpyকোনও স্ট্রিংয়ের প্রত্যাশা করা কোনও ফাংশন (বা স্ট্রিংয়ের প্রত্যাশা করা কোনও ফাংশন) এও জোর দেয় ) যদি আপনি ফাংশনটি নুল-টার্মিনেটেড স্ট্রিং সরবরাহ করতে ব্যর্থ হন - কোথায় থামবেন তা কোনও ধারণা নেই এবং আপনার বাকি মেমরি বিভাগে খুশি হয়ে ছুটে যাবে it invoking অনির্ধারিত আচরণ একটি পর্যন্ত nul-অক্ষর শুধু মেমরি কোথাও পাওয়া যাবে এরকম - অথবা একটি সেগমেন্টেশন ফল্ট পড়ে)
যে কেন একটি আশা ফাংশন nul-সমাপ্ত স্ট্রিং একটি প্রেরণ করা আবশ্যক nul-সমাপ্ত STRING এবং কেন এটা গুরুত্বপূর্ণ ।
char str[] = "hello";।