Null-terminated string
کمپیوٹر پروگرامنگ میں، نیل-ٹرمینیٹڈ سٹرنگ ایک کریکٹر سٹرنگ ہے جسے حروف پر مشتمل صف کے طور پر محفوظ کیا جاتا ہے اور اسے نیل کریکٹر کے ساتھ ختم کیا جاتا ہے (صفر کی اندرونی قدر والا ایک کردار، جسے اس مضمون میں "این یو ایل" کہا جاتا ہے، گلف زیرو کی طرح نہیں ہے)۔ متبادل نام سی سٹرنگ ہیں، جو سی پروگرامنگ زبان اور ASCIIZ سے مراد ہیں (حالانکہ C ASCII کے علاوہ دیگر انکوڈنگ استعمال کر سکتا ہے)۔ تار کی لمبائی (پہلے) این یو ایل کی تلاش سے معلوم ہوتی ہے۔ یہ سست ہو سکتا ہے کیونکہ اس میں تار کی لمبائی کے حوالے سے O (n) (لکیری وقت) لگتا ہے۔ اس کا مطلب یہ بھی ہے کہ ایک سٹرنگ میں این یو ایل نہیں ہو سکتا (میموری میں این یو ایل ہوتا ہے، لیکن یہ آخری کردار کے بعد ہوتا ہے، سٹرنگ کے بعد نہیں)۔ پی ڈی پی-11 اسمبلی زبانوں کی. اے ایس سی آئی زیڈ ہدایت اور پی ڈی پی-10 کے لیے میکرو-10 میکرو اسمبلی زبان کی اے ایس سی آئی زیڈ ہدایت کے ذریعے تاریخ کے ختم ہونے والے تار تیار کیے گئے تھے۔ یہ سی پروگرامنگ زبان کی ترقی سے پہلے کے ہیں، لیکن سٹرنگ کی دیگر شکلیں اکثر استعمال کی جاتی تھیں۔ اس وقت سی (اور جن زبانوں سے یہ اخذ کیا گیا تھا) تیار کیا گیا تھا، میموری انتہائی محدود تھی، اس لیے تار کی لمبائی کو ذخیرہ کرنے کے لیے اوور ہیڈ کا صرف ایک بائٹ استعمال کرنا پرکشش تھا۔ اس وقت کا واحد مقبول متبادل، جسے عام طور پر "پاسکل سٹرنگ" کہا جاتا ہے (ایک زیادہ جدید اصطلاح "لمبائی سے پہلے" ہے)، سٹرنگ کی لمبائی کو ذخیرہ کرنے کے لیے ایک لیڈنگ بائٹ کا استعمال کرتا تھا۔ یہ سٹرنگ کو این یو ایل پر مشتمل کرنے کی اجازت دیتا ہے اور لمبائی تلاش کرنے کے لیے صرف ایک میموری رسائی (او (1) (مستقل) وقت) کی ضرورت ہوتی ہے، لیکن سٹرنگ کی لمبائی 255 حروف تک محدود ہوتی ہے۔ سی ڈیزائنر ڈینس رچی نے تار کی لمبائی کی حد سے بچنے کے لیے نل ٹرمینیشن کے کنونشن کی پیروی کرنے کا انتخاب کیا اور اس وجہ سے کہ گنتی کو برقرار رکھنا، ان کے تجربے میں، ٹرمینیٹر کے استعمال سے کم آسان لگتا تھا۔ اس کا سی پی یو انسٹرکشن سیٹ ڈیزائن پر کچھ اثر پڑا۔ 1970 اور 1980 کی دہائی میں کچھ سی پی یوز، جیسے زیلوگ زیڈ 80 اور ڈی ای سی وی اے ایکس، میں لمبائی سے پہلے والے تاروں کو سنبھالنے کے لیے مخصوص ہدایات تھیں۔ تاہم، جیسے جیسے نیل-ٹرمینیٹڈ سٹرنگ نے توجہ حاصل کی، سی پی یو ڈیزائنرز نے اسے مدنظر رکھنا شروع کیا، جیسا کہ مثال کے طور پر 1992 میں ای ایس/9000 520 میں "لاجیکل سٹرنگ اسسٹ" ہدایات اور 2015 میں آئی بی ایم زیڈ 13 میں ویکٹر سٹرنگ ہدایات شامل کرنے کے آئی بی ایم کے فیصلے میں دیکھا گیا۔ فری بی ایس ڈی ڈویلپر پول ہیننگ کیمپ نے اے سی ایم قطار میں لکھتے ہوئے 2 بائٹ (ایک بائٹ نہیں) لمبائی پر کالعدم تاروں کی فتح کو "ایک بائٹ کی اب تک کی سب سے مہنگی غلطی" قرار دیا۔ حدود اگرچہ لاگو کرنا آسان ہے، لیکن یہ نمائندگی غلطیوں اور کارکردگی کے مسائل کا شکار رہی ہے۔ نال-ٹرمینیشن نے تاریخی طور پر حفاظتی مسائل پیدا کیے ہیں۔ تار کے بیچ میں ڈالا گیا این یو ایل اسے غیر متوقع طور پر کاٹ دے گا۔ ایک عام بگ یہ تھا کہ این یو ایل کے لیے اضافی جگہ مختص نہ کی جائے، اس لیے اسے ملحقہ میموری پر لکھا گیا۔ دوسرا یہ تھا کہ این یو ایل بالکل نہ لکھا جائے، جس کا اکثر جانچ کے دوران پتہ نہیں چلا کیونکہ میموری کے بلاک میں پہلے سے ہی صفر ہوتے تھے۔ لمبائی تلاش کرنے کے اخراجات کی وجہ سے، بہت سے پروگراموں نے ایک سٹرنگ کو فکسڈ سائز کے بفر میں کاپی کرنے سے پہلے پریشان نہیں کیا، جس کی وجہ سے اگر یہ بہت لمبا تھا تو بفر اوور فلو ہوتا ہے۔ صفر کو ذخیرہ کرنے میں ناکامی کے لیے ضروری ہے کہ متن اور بائنری ڈیٹا کو الگ رکھا جائے اور مختلف افعال کے ذریعے سنبھالا جائے (مؤخر الذکر کے لیے ڈیٹا کی لمبائی بھی فراہم کرنے کی ضرورت ہوتی ہے)۔ جب غلط فنکشن استعمال کیا جاتا ہے تو یہ کوڈ کی بے کاری اور غلطیوں کا باعث بن سکتا ہے۔ لمبائی تلاش کرنے میں رفتار کے مسائل کو عام طور پر کسی اور آپریشن کے ساتھ جوڑ کر کم کیا جا سکتا ہے جو کہ ویسے بھی O (n) ہے، جیسے کہ اسٹرلسیپی میں۔ تاہم، اس کے نتیجے میں ہمیشہ ایک بدیہی API نہیں ہوتا ہے۔ کریکٹر انکوڈنگز نول-ٹرمینیٹڈ سٹرنگز کے لیے ضروری ہے کہ انکوڈنگ کہیں بھی زیرو بائٹ (0x00) کا استعمال نہ کرے ؛ اس لیے ہر ممکنہ ASCII یا UTF-8 سٹرنگ کو اسٹور کرنا ممکن نہیں ہے۔ تاہم، اے ایس سی آئی آئی یا یو ٹی ایف-8 کے ذیلی سیٹ-این یو ایل کے علاوہ ہر کردار-کو کالعدم تاروں میں محفوظ کرنا عام بات ہے۔ کچھ نظام "ترمیم شدہ یو ٹی ایف-8" کا استعمال کرتے ہیں جو این یو ایل کو دو غیر صفر بائٹس (0xC0، 0x80) کے طور پر انکوڈ کرتا ہے اور اس طرح تمام ممکنہ تاروں کو ذخیرہ کرنے کی اجازت دیتا ہے۔ یو ٹی ایف-8 معیار کے ذریعہ اس کی اجازت نہیں ہے، کیونکہ یہ ایک طویل انکوڈنگ ہے، اور اسے حفاظتی خطرے کے طور پر دیکھا جاتا ہے۔ اس کے بجائے کچھ دوسرے بائٹ کو سٹرنگ کے اختتام کے طور پر استعمال کیا جا سکتا ہے، جیسے 0xFE یا 0xFF، جو UTF-8 میں استعمال نہیں ہوتے ہیں۔ یو ٹی ایف-16 2-بائٹ انٹیجرز کا استعمال کرتا ہے اور چونکہ دونوں بائٹ صفر ہو سکتے ہیں (اور حقیقت میں ہر دوسرا بائٹ، جب اے ایس سی آئی آئی ٹیکسٹ کی نمائندگی کرتا ہے)، اسے کالعدم بائٹ سٹرنگ میں محفوظ نہیں کیا جا سکتا۔ تاہم، کچھ زبانیں 16 بٹ یو ٹی ایف-16 حروف کی ایک تار کو لاگو کرتی ہیں، جسے 16 بٹ این یو ایل (0x0000) کے ذریعے ختم کیا جاتا ہے۔ بہتری سی سٹرنگ ہینڈلنگ کو کم غلطی کا شکار بنانے کی بہت سی کوششیں کی گئی ہیں۔ ایک حکمت عملی یہ ہے کہ اسٹرڈپ اور اسٹرلسیپی جیسے محفوظ افعال کو شامل کیا جائے، جبکہ غیر محفوظ افعال جیسے کہ گیٹس کے استعمال کو کم کیا جائے۔ دوسرا یہ ہے کہ سی سٹرنگ کے ارد گرد آبجیکٹ پر مبنی ریپر شامل کیا جائے تاکہ صرف محفوظ کالز کی جا سکیں۔ تاہم، غیر محفوظ افعال کو ویسے بھی کال کرنا ممکن ہے۔ زیادہ تر جدید کتب خانے سی سٹرنگز کو ایک ایسے ڈھانچے سے تبدیل کرتے ہیں جس میں 32 بٹ یا بڑی لمبائی کی قیمت ہوتی ہے (لمبائی سے پہلے والے سٹرنگز کے لیے پہلے سے کہیں زیادہ سمجھا جاتا تھا)، اور اکثر ایک اور پوائنٹر، ایک حوالہ شمار، اور یہاں تک کہ ایک این یو ایل بھی شامل کرتے ہیں تاکہ سی سٹرنگ میں تبدیلی کو تیز کیا جا سکے۔ میموری اب بہت بڑی ہے، اس طرح کہ اگر ہر سٹرنگ میں 3 (یا 16، یا اس سے زیادہ) بائٹس کا اضافہ ایک حقیقی مسئلہ ہے تو سافٹ ویئر کو اتنے چھوٹے تاروں سے نمٹنا پڑے گا کہ اسٹوریج کا کوئی دوسرا طریقہ اور بھی زیادہ میموری کو بچائے گا (مثال کے طور پر اتنی زیادہ نقلیں ہو سکتی ہیں کہ ہیش ٹیبل کم میموری استعمال کرے گا)۔ مثالوں میں سی + + اسٹینڈرڈ ٹیمپلیٹ لائبریری ایس ٹی ڈی:: سٹرنگ، کیو ٹی کیو اسٹرینگ، ایم ایف سی سی ایس سٹرنگ، اور کور فاؤنڈیشن سے سی پر مبنی نفاذ سی ایف اسٹرینگ کے ساتھ ساتھ فاؤنڈیشن سے اس کا آبجیکٹیو-سی بہن بھائی این ایس ایس سٹرنگ، دونوں ایپل کے ذریعے شامل ہیں۔ رسی جیسے تاروں کو ذخیرہ کرنے کے لیے مزید پیچیدہ ڈھانچے بھی استعمال کیے جا سکتے ہیں۔ خالی سٹرنگ سینٹینل ویلیو حوالہ جات سٹرنگ ڈیٹا ڈھانچے ای ایس: سی سٹرنگ بھی دیکھیں۔