Null-terminated string
कंप्यूटर प्रोग्रामिंग में, एक शून्य-समाप्त स्ट्रिंग एक वर्ण स्ट्रिंग है जिसे वर्णों वाली सरणी के रूप में संग्रहीत किया जाता है और एक शून्य वर्ण के साथ समाप्त किया जाता है (शून्य के आंतरिक मूल्य वाला एक वर्ण, जिसे इस लेख में "एन. यू. एल". कहा जाता है, जो ग्लिफ शून्य के समान नहीं है)। वैकल्पिक नाम सी स्ट्रिंग हैं, जो सी प्रोग्रामिंग भाषा और एएससीआईआईजेड को संदर्भित करता है (हालांकि सी एएससीआईआई के अलावा अन्य एन्कोडिंग का उपयोग कर सकता है)। तार की लंबाई (पहले) एन. यू. एल. की खोज से पाई जाती है। यह धीमा हो सकता है क्योंकि इसमें स्ट्रिंग की लंबाई के संबंध में ओ (एन) (रैखिक समय) लगता है। इसका मतलब यह भी है कि एक स्ट्रिंग में एक एन. यू. एल. नहीं हो सकता है (मेमोरी में एक एन. यू. एल. है, लेकिन यह अंतिम वर्ण के बाद है, स्ट्रिंग के बाद नहीं)। पी. डी. पी.-11 विधानसभा भाषाओं के. ए. एस. सी. आई. जेड. निर्देश और पी. डी. पी.-10 के लिए एम. ए. सी. आर. ओ.-10 मैक्रो असेंबली भाषा के ए. एस. सी. आई. जेड. निर्देश द्वारा इतिहास शून्य-समाप्त तारों का निर्माण किया गया था। ये सी प्रोग्रामिंग भाषा के विकास से पहले के हैं, लेकिन स्ट्रिंग के अन्य रूपों का अक्सर उपयोग किया जाता था। जिस समय सी (और जिन भाषाओं से यह लिया गया था) विकसित किया गया था, स्मृति अत्यंत सीमित थी, इसलिए एक स्ट्रिंग की लंबाई को संग्रहीत करने के लिए केवल एक बाईट का उपयोग करना आकर्षक था। उस समय एकमात्र लोकप्रिय विकल्प, जिसे आमतौर पर "पास्कल स्ट्रिंग" कहा जाता था (एक अधिक आधुनिक शब्द "लेंथ-प्रीफिक्स्ड" है), स्ट्रिंग की लंबाई को संग्रहीत करने के लिए एक अग्रणी बाइट का उपयोग करता था। यह स्ट्रिंग को एन. यू. एल. रखने की अनुमति देता है और लंबाई का पता लगाने के लिए केवल एक मेमोरी एक्सेस (ओ (1) (स्थिर) समय) की आवश्यकता होती है, लेकिन स्ट्रिंग की लंबाई 255 वर्णों तक सीमित होती है। सी डिजाइनर डेनिस रिची ने एक तार की लंबाई पर सीमा से बचने के लिए नल-टर्मिनेशन की परंपरा का पालन करना चुना और क्योंकि गिनती को बनाए रखना, उनके अनुभव में, टर्मिनेटर का उपयोग करने की तुलना में कम सुविधाजनक लग रहा था। सीपीयू निर्देश सेट डिजाइन पर इसका कुछ प्रभाव पड़ा। 1970 और 1980 के दशक में कुछ सीपीयू, जैसे कि जिलॉग जेड80 और डीईसी वीएएक्स में लंबाई-पूर्वनिर्धारित तारों को संभालने के लिए समर्पित निर्देश थे। हालाँकि, जैसे-जैसे नल-टर्मिनेटेड स्ट्रिंग ने कर्षण प्राप्त किया, सीपीयू डिजाइनरों ने इसे ध्यान में रखना शुरू कर दिया, जैसा कि उदाहरण के लिए 1992 में ईएस/9000 520 में "लॉजिकल स्ट्रिंग असिस्ट" निर्देशों को जोड़ने के आईबीएम के निर्णय और 2015 में आईबीएम जेड13 में वेक्टर स्ट्रिंग निर्देशों में देखा गया। फ्रीबीएसडी डेवलपर पॉल-हेनिंग कैम्प ने एसीएम कतार में लिखते हुए, 2-बाइट (एक-बाइट नहीं) लंबाई पर नल-टर्मिनेटेड स्ट्रिंग्स की जीत को "अब तक की सबसे महंगी एक-बाइट गलती" के रूप में संदर्भित किया। सीमाएँ जबकि लागू करना सरल है, यह प्रतिनिधित्व त्रुटियों और प्रदर्शन समस्याओं से ग्रस्त रहा है। शून्य-समाप्ति ने ऐतिहासिक रूप से सुरक्षा समस्याएं पैदा की हैं। एक तार के बीच में डाला गया एक एन. यू. एल. इसे अप्रत्याशित रूप से काट देगा। एक आम त्रुटि एन. यू. एल. के लिए अतिरिक्त स्थान आवंटित नहीं करना था, इसलिए इसे आसन्न स्मृति पर लिखा गया था। दूसरा एन. यू. एल. को बिल्कुल नहीं लिखना था, जिसका अक्सर परीक्षण के दौरान पता नहीं चलता था क्योंकि स्मृति खंड में पहले से ही शून्य होते थे। लंबाई खोजने के खर्च के कारण, कई कार्यक्रमों ने एक स्ट्रिंग को एक निश्चित आकार के बफर में कॉपी करने से पहले परेशान नहीं किया, जिससे बहुत लंबा होने पर बफर अतिप्रवाह हो गया। शून्य को संग्रहीत करने में असमर्थता के लिए आवश्यक है कि पाठ और द्विआधारी डेटा को अलग रखा जाए और विभिन्न कार्यों द्वारा नियंत्रित किया जाए (बाद वाले को डेटा की लंबाई की भी आपूर्ति की आवश्यकता होती है)। यह गलत फ़ंक्शन का उपयोग करने पर कोड अतिरेक और त्रुटियों का कारण बन सकता है। लंबाई खोजने के साथ गति की समस्याओं को आमतौर पर इसे किसी अन्य ऑपरेशन के साथ जोड़कर कम किया जा सकता है जो कि ओ (एन) है, जैसे कि एस. आर. एल. सी. पी. में। हालाँकि, यह हमेशा एक सहज ज्ञान युक्त एपीआई में परिणाम नहीं देता है। कैरेक्टर एनकोडिंग नल-टर्मिनेटेड स्ट्रिंग्स के लिए आवश्यक है कि एनकोडिंग कहीं भी शून्य बाइट (0x00) का उपयोग न करे; इसलिए हर संभव ASCII या UTF-8 स्ट्रिंग को संग्रहीत करना संभव नहीं है। हालाँकि, ए. एस. सी. आई. आई. या यू. टी. एफ.-8 के सबसेट-एन. यू. एल. को छोड़कर हर वर्ण-को शून्य-समाप्त तारों में संग्रहीत करना आम बात है। कुछ प्रणालियाँ "संशोधित यू. टी. एफ.-8" का उपयोग करती हैं जो एन. यू. एल. को दो गैर-शून्य बाइट्स (0xC0,0x80) के रूप में कूटबद्ध करती हैं और इस प्रकार सभी संभावित स्ट्रिंग्स को संग्रहीत करने की अनुमति देती हैं। यूटीएफ-8 मानक द्वारा इसकी अनुमति नहीं है, क्योंकि यह एक लंबी एन्कोडिंग है, और इसे एक सुरक्षा जोखिम के रूप में देखा जाता है। इसके बजाय कुछ अन्य बाइट्स का उपयोग स्ट्रिंग के अंत के रूप में किया जा सकता है, जैसे 0xFE या 0xFF, जिनका उपयोग UTF-8 में नहीं किया जाता है। यू. टी. एफ.-16 2-बिट पूर्णांकों का उपयोग करता है और क्योंकि दोनों में से कोई भी बिट शून्य हो सकता है (और वास्तव में हर दूसरा बिट, जब ए. एस. सी. आई. आई. पाठ का प्रतिनिधित्व करता है), तो इसे शून्य-समाप्त बिट स्ट्रिंग में संग्रहीत नहीं किया जा सकता है। हालाँकि, कुछ भाषाएँ 16-बिट यू. टी. एफ.-16 वर्णों की एक स्ट्रिंग को लागू करती हैं, जिसे 16-बिट एन. यू. एल. (0x0000) द्वारा समाप्त किया जाता है। सुधार सी स्ट्रिंग हैंडलिंग को कम त्रुटि प्रवण बनाने के कई प्रयास किए गए हैं। एक रणनीति है कि सुरक्षित कार्यों जैसे कि एस. आर. डी. यू. पी. और एस. आर. एल. सी. पी. आई. को जोड़ा जाए, जबकि असुरक्षित कार्यों जैसे कि गेट के उपयोग को कम किया जाए। दूसरा सी स्ट्रिंग्स के आसपास एक ऑब्जेक्ट-ओरिएंटेड रैपर जोड़ना है ताकि केवल सुरक्षित कॉल की जा सके। हालाँकि, असुरक्षित कार्यों को वैसे भी कॉल करना संभव है। अधिकांश आधुनिक पुस्तकालय सी स्ट्रिंग्स को एक संरचना के साथ प्रतिस्थापित करते हैं जिसमें 32-बिट या बड़ी लंबाई का मान होता है (लंबाई-पूर्वनिर्धारित स्ट्रिंग्स के लिए पहले से कहीं अधिक माना जाता था), और अक्सर एक और सूचक, एक संदर्भ गणना, और यहां तक कि एक एन. यू. एल. भी जोड़ते हैं ताकि सी स्ट्रिंग में परिवर्तन को तेज किया जा सके। मेमोरी अब बहुत बड़ी है, जैसे कि यदि प्रत्येक स्ट्रिंग में 3 (या 16, या अधिक) बाइट्स जोड़ना एक वास्तविक समस्या है तो सॉफ़्टवेयर को इतने छोटे स्ट्रिंग्स से निपटना होगा कि कुछ अन्य भंडारण विधि और भी अधिक मेमोरी को बचा लेगी (उदाहरण के लिए इतने सारे डुप्लिकेट हो सकते हैं कि एक हैश टेबल कम मेमोरी का उपयोग करेगा)। उदाहरणों में सी + + मानक टेम्पलेट लाइब्रेरी एसटीडीः स्ट्रिंग, क्यूटी क्यूस्ट्रिंग, एमएफसी सीएसट्रिंग, और कोर फाउंडेशन से सी-आधारित कार्यान्वयन सीएफस्ट्रिंग के साथ-साथ फाउंडेशन से इसके उद्देश्य-सी भाई एनएसएसट्रिंग, दोनों एप्पल द्वारा शामिल हैं। रस्सी जैसे तारों को संग्रहीत करने के लिए अधिक जटिल संरचनाओं का भी उपयोग किया जा सकता है। खाली स्ट्रिंग सेंटिनल मान संदर्भ स्ट्रिंग डेटा संरचना ईएसः सी स्ट्रिंग भी देखें।