Null-terminated string
কম্পিউটার প্রোগ্রামিং-এ, একটি নাল-টার্মিনেটেড স্ট্রিং হল একটি অক্ষর স্ট্রিং যা অক্ষর ধারণকারী একটি অ্যারে হিসাবে সংরক্ষণ করা হয় এবং একটি নাল অক্ষর দিয়ে শেষ হয় (শূন্যের অভ্যন্তরীণ মান সহ একটি অক্ষর, যাকে এই নিবন্ধে "এন. ইউ. এল" বলা হয়, গ্লিফ শূন্যের মতো নয়)। বিকল্প নামগুলি হল সি স্ট্রিং, যা সি প্রোগ্রামিং ভাষা এবং এ. এস. সি. আই. আই. জেড-কে বোঝায় (যদিও সি এ. এস. সি. আই. আই ছাড়া অন্য এনকোডিং ব্যবহার করতে পারে)। (প্রথম) এন. ইউ. এল অনুসন্ধানের মাধ্যমে একটি স্ট্রিংয়ের দৈর্ঘ্য পাওয়া যায়। এটি ধীর হতে পারে কারণ এটি স্ট্রিংয়ের দৈর্ঘ্যের সাপেক্ষে ও (এন) (রৈখিক সময়) নেয়। এর অর্থ হল যে একটি স্ট্রিং একটি এন. ইউ. এল ধারণ করতে পারে না (স্মৃতিতে একটি এন. ইউ. এল রয়েছে, তবে এটি শেষ অক্ষরের পরে, স্ট্রিং নয়)। পিডিপি-11 অ্যাসেম্বলি ভাষার. এ. এস. সি. আই. জেড নির্দেশ এবং পিডিপি-10-এর জন্য ম্যাক্রো-10 ম্যাক্রো অ্যাসেম্বলি ভাষার এ. এস. সি. আই. জেড নির্দেশ দ্বারা ইতিহাস শূন্য-সমাপ্ত স্ট্রিং তৈরি করা হয়েছিল। এগুলি সি প্রোগ্রামিং ভাষার বিকাশের পূর্ববর্তী, তবে অন্যান্য ধরনের স্ট্রিং প্রায়শই ব্যবহৃত হত। যখন সি (এবং যে ভাষাগুলি থেকে এটি উদ্ভূত হয়েছিল) বিকশিত হয়েছিল, তখন স্মৃতিশক্তি অত্যন্ত সীমিত ছিল, তাই একটি স্ট্রিংয়ের দৈর্ঘ্য সংরক্ষণের জন্য ওভারহেডের শুধুমাত্র একটি বাইট ব্যবহার করা আকর্ষণীয় ছিল। সেই সময়ের একমাত্র জনপ্রিয় বিকল্প, যাকে সাধারণত "প্যাসকেল স্ট্রিং" বলা হয় (আরও আধুনিক শব্দ হল "দৈর্ঘ্য-পূর্বনির্ধারিত"), স্ট্রিংয়ের দৈর্ঘ্য সংরক্ষণের জন্য একটি নেতৃস্থানীয় বাইট ব্যবহার করা হয়। এটি স্ট্রিংকে এন. ইউ. এল ধারণ করার অনুমতি দেয় এবং দৈর্ঘ্য খুঁজে বের করার জন্য শুধুমাত্র একটি মেমরি অ্যাক্সেস (ও (1) (ধ্রুবক) সময়) প্রয়োজন, তবে স্ট্রিংয়ের দৈর্ঘ্য 255 অক্ষরের মধ্যে সীমাবদ্ধ। সি ডিজাইনার ডেনিস রিচি একটি স্ট্রিংয়ের দৈর্ঘ্যের সীমাবদ্ধতা এড়াতে নাল-টার্মিনেশনের প্রথা অনুসরণ করতে বেছে নিয়েছিলেন এবং কারণ গণনা বজায় রাখা তাঁর অভিজ্ঞতায় টার্মিনেটর ব্যবহারের চেয়ে কম সুবিধাজনক বলে মনে হয়েছিল। এটি সিপিইউ নির্দেশ সেট ডিজাইনের উপর কিছুটা প্রভাব ফেলেছিল। 1970 এবং 1980-এর দশকে কিছু সিপিইউ, যেমন জিলগ জেড80 এবং ডিইসি ভিএএক্স-এর দৈর্ঘ্য-পূর্বনির্ধারিত স্ট্রিং পরিচালনা করার জন্য নিবেদিত নির্দেশাবলী ছিল। যাইহোক, নাল-টার্মিনেটেড স্ট্রিংটি আকর্ষণ অর্জন করার সাথে সাথে সিপিইউ ডিজাইনাররা এটিকে বিবেচনায় নিতে শুরু করেন, যেমনটি 1992 সালে ইএস/9000 520-এ আইবিএম-এর "লজিক্যাল স্ট্রিং অ্যাসিস্ট" নির্দেশাবলী এবং 2015 সালে আইবিএম জেড13-এ ভেক্টর স্ট্রিং নির্দেশাবলী যোগ করার সিদ্ধান্তে দেখা যায়। ফ্রিবিএসডি ডেভেলপার পল-হেনিং ক্যাম্প এসিএম সারিতে লিখেছেন, 2-বাইট (এক-বাইট নয়) দৈর্ঘ্যের উপর নাল-টার্মিনেটেড স্ট্রিংয়ের বিজয়কে "সর্বকালের সবচেয়ে ব্যয়বহুল এক-বাইট ভুল" হিসাবে উল্লেখ করেছেন। সীমাবদ্ধতাগুলি বাস্তবায়িত করা সহজ হলেও, এই উপস্থাপনাটি ত্রুটি এবং কর্মক্ষমতার সমস্যাগুলির প্রবণ। নাল-টার্মিনেশন ঐতিহাসিকভাবে নিরাপত্তা সমস্যা তৈরি করেছে। একটি স্ট্রিংয়ের মাঝখানে ঢোকানো একটি এন. ইউ. এল অপ্রত্যাশিতভাবে এটিকে কেটে ফেলবে। একটি সাধারণ ত্রুটি ছিল এন. ইউ. এল-এর জন্য অতিরিক্ত স্থান বরাদ্দ না করা, তাই এটি সংলগ্ন স্মৃতিতে লেখা হয়েছিল। আরেকটি ছিল এন. ইউ. এল মোটেও না লেখা, যা প্রায়শই পরীক্ষার সময় সনাক্ত করা যেত না কারণ মেমরির ব্লকে ইতিমধ্যে শূন্য ছিল। দৈর্ঘ্য খুঁজে বের করার ব্যয়ের কারণে, অনেক প্রোগ্রাম একটি নির্দিষ্ট আকারের বাফার-এ একটি স্ট্রিং অনুলিপি করার আগে বিরক্ত করেনি, যার ফলে এটি খুব দীর্ঘ হলে একটি বাফার ওভারফ্লো হয়। শূন্য সংরক্ষণের অক্ষমতার জন্য পাঠ্য এবং বাইনারি ডেটা আলাদা রাখা এবং বিভিন্ন ফাংশন দ্বারা পরিচালনা করা প্রয়োজন (পরেরটির জন্য ডেটা দৈর্ঘ্যও সরবরাহ করা প্রয়োজন)। ভুল ফাংশন ব্যবহার করা হলে এটি কোড রিডান্ডেন্সি এবং ত্রুটির দিকে নিয়ে যেতে পারে। দৈর্ঘ্য খুঁজে বের করার ক্ষেত্রে গতির সমস্যাগুলি সাধারণত অন্য একটি ক্রিয়াকলাপের সাথে একত্রিত করে প্রশমিত করা যেতে পারে যা ও (এন) যাইহোক, যেমন স্ট্রালসিপিতে। যাইহোক, এর ফলে সবসময় একটি স্বজ্ঞাত এপিআই হয় না। অক্ষর এনকোডিং শূন্য-সমাপ্ত স্ট্রিংয়ের জন্য প্রয়োজন যে এনকোডিং কোথাও শূন্য বাইট (0x00) ব্যবহার করে না; তাই প্রতিটি সম্ভাব্য এ. এস. সি. আই. আই বা ইউ. টি. এফ-8 স্ট্রিং সংরক্ষণ করা সম্ভব নয়। তবে, এ. এস. সি. আই. আই বা ইউ. টি. এফ-8-এর উপসেট-এন. ইউ. এল ব্যতীত প্রতিটি অক্ষর-শূন্য-সমাপ্ত স্ট্রিংয়ে সংরক্ষণ করা সাধারণ। কিছু সিস্টেম "পরিবর্তিত ইউটিএফ-8" ব্যবহার করে যা এনইউএল-কে দুটি অ-শূন্য বাইট (0xC0,0x80) হিসাবে এনকোড করে এবং এইভাবে সমস্ত সম্ভাব্য স্ট্রিং সংরক্ষণ করার অনুমতি দেয়। এটি ইউটিএফ-8 স্ট্যান্ডার্ড দ্বারা অনুমোদিত নয়, কারণ এটি একটি দীর্ঘ এনকোডিং, এবং এটি একটি নিরাপত্তা ঝুঁকি হিসাবে দেখা হয়। পরিবর্তে অন্য কিছু বাইট স্ট্রিংয়ের শেষ হিসাবে ব্যবহার করা যেতে পারে, যেমন 0xFE বা 0xFF, যা UTF-8-এ ব্যবহৃত হয় না। ইউটিএফ-16 2-বাইট পূর্ণসংখ্যা ব্যবহার করে এবং যেহেতু উভয় বাইটই শূন্য হতে পারে (এবং প্রকৃতপক্ষে প্রতিটি অন্যান্য বাইট, যখন এএসসিআইআই পাঠ্যের প্রতিনিধিত্ব করে), একটি নাল-টার্মিনেটেড বাইট স্ট্রিংয়ে সংরক্ষণ করা যায় না। যাইহোক, কিছু ভাষা 16-বিট ইউটিএফ-16 অক্ষরের একটি স্ট্রিং প্রয়োগ করে, যা একটি 16-বিট এনইউএল (0x0000) দ্বারা সমাপ্ত হয়। উন্নতি সি স্ট্রিং পরিচালনাকে কম ত্রুটি প্রবণ করার জন্য অনেক প্রচেষ্টা করা হয়েছে। একটি কৌশল হল এস. আর. ডি. ইউ. পি এবং এস. আর. এল. সি. পি-র মতো নিরাপদ ফাংশন যোগ করা, যেখানে গেটস-এর মতো অনিরাপদ ফাংশনগুলির ব্যবহারকে অবজ্ঞা করা হয়। আরেকটি হল সি স্ট্রিংয়ের চারপাশে একটি অবজেক্ট-ওরিয়েন্টেড মোড়ক যুক্ত করা যাতে শুধুমাত্র নিরাপদ কল করা যায়। যাইহোক, যেভাবেই হোক অনিরাপদ ফাংশনগুলিকে কল করা সম্ভব। বেশিরভাগ আধুনিক গ্রন্থাগার সি স্ট্রিংকে একটি 32-বিট বা বৃহত্তর দৈর্ঘ্যের মান (দৈর্ঘ্য-পূর্বনির্ধারিত স্ট্রিংয়ের জন্য যা আগে বিবেচনা করা হত তার চেয়ে অনেক বেশি) সহ একটি কাঠামো দিয়ে প্রতিস্থাপন করে এবং প্রায়শই আরেকটি পয়েন্টার, একটি রেফারেন্স গণনা এবং এমনকি একটি এন. ইউ. এল যোগ করে একটি সি স্ট্রিং-এ রূপান্তরের গতি বাড়ানোর জন্য। মেমোরি এখন অনেক বড়, যেমন প্রতিটি স্ট্রিংয়ে 3 (বা 16, বা তার বেশি) বাইট যোগ করা যদি একটি আসল সমস্যা হয় তবে সফ্টওয়্যারটিকে এতগুলি ছোট স্ট্রিং নিয়ে কাজ করতে হবে যে অন্য কোনও স্টোরেজ পদ্ধতি আরও বেশি মেমরি সাশ্রয় করবে (উদাহরণস্বরূপ, এতগুলি ডুপ্লিকেট থাকতে পারে যে একটি হ্যাশ টেবিল কম মেমরি ব্যবহার করবে)। উদাহরণগুলির মধ্যে রয়েছে সি + + স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি স্ট্যান্ডার্ডঃঃ স্ট্রিং, কিউটি কিউস্ট্রিং, এমএফসি সিএসট্রিং, এবং কোর ফাউন্ডেশন থেকে সি-ভিত্তিক বাস্তবায়ন সিএফস্ট্রিং পাশাপাশি অ্যাপল দ্বারা ফাউন্ডেশন থেকে এর উদ্দেশ্য-সি ভাই এনএসএসট্রিং। দড়ির মতো স্ট্রিং সংরক্ষণের জন্য আরও জটিল কাঠামো ব্যবহার করা যেতে পারে। আরও দেখুন খালি স্ট্রিং সেন্টিনেল মান রেফারেন্স স্ট্রিং ডেটা স্ট্রাকচার এসঃ সি স্ট্রিং