Null-terminated string
કોમ્પ્યુટર પ્રોગ્રામિંગમાં, નલ-ટર્મિનેટેડ સ્ટ્રિંગ એ અક્ષરો ધરાવતી શ્રેણી તરીકે સંગ્રહિત અક્ષર સ્ટ્રિંગ છે અને નલ અક્ષર સાથે સમાપ્ત થાય છે (શૂન્યના આંતરિક મૂલ્ય સાથેનું અક્ષર, જેને આ લેખમાં "એન. યુ. એલ". કહેવાય છે, જે ગ્લિફ શૂન્ય જેવું નથી). વૈકલ્પિક નામો સી સ્ટ્રિંગ છે, જે સી પ્રોગ્રામિંગ ભાષા અને એએસસીઆઈઆઈઝેડનો સંદર્ભ આપે છે (જોકે સી એએસસીઆઈઆઈ સિવાયના એન્કોડિંગનો ઉપયોગ કરી શકે છે). દોરીની લંબાઈ (પ્રથમ) એન. યુ. એલ. ની શોધ દ્વારા મળી આવે છે. આ ધીમું હોઈ શકે છે કારણ કે તે શબ્દમાળાની લંબાઈના સંદર્ભમાં ઓ (એન) (રેખીય સમય) લે છે. તેનો અર્થ એ પણ છે કે સ્ટ્રિંગમાં એન. યુ. એલ. ન હોઈ શકે (મેમરીમાં એન. યુ. એલ. હોય છે, પરંતુ તે છેલ્લા અક્ષર પછી હોય છે, સ્ટ્રિંગ પછી નહીં). પી. ડી. પી.-11 વિધાનસભા ભાષાઓના. એ. એસ. સી. આઈ. ઝેડ. નિર્દેશ અને પી. ડી. પી.-10 માટે એમ. એ. સી. આર. ઓ.-10 મેક્રો વિધાનસભા ભાષાના એ. એસ. સી. આઈ. ઝેડ. નિર્દેશ દ્વારા શૂન્ય-સમાપ્ત શબ્દમાળાઓ બનાવવામાં આવી હતી. આ સી પ્રોગ્રામિંગ ભાષાના વિકાસની આગાહી કરે છે, પરંતુ શબ્દમાળાના અન્ય સ્વરૂપોનો ઘણીવાર ઉપયોગ થતો હતો. તે સમયે સી (અને તે જે ભાષાઓમાંથી લેવામાં આવી હતી) વિકસાવવામાં આવી હતી, મેમરી અત્યંત મર્યાદિત હતી, તેથી સ્ટ્રિંગની લંબાઈને સંગ્રહિત કરવા માટે ઓવરહેડના માત્ર એક બાઈટનો ઉપયોગ કરવો આકર્ષક હતો. તે સમયે એકમાત્ર લોકપ્રિય વિકલ્પ, જેને સામાન્ય રીતે "પાસ્કલ સ્ટ્રિંગ" કહેવામાં આવે છે (વધુ આધુનિક શબ્દ "લંબાઈ-પૂર્વનિર્ધારિત" છે), સ્ટ્રિંગની લંબાઈને સંગ્રહિત કરવા માટે અગ્રણી બાઈટનો ઉપયોગ કરે છે. આ શબ્દમાળાને એન. યુ. એલ. સમાવવાની મંજૂરી આપે છે અને લંબાઈ શોધવા માટે માત્ર એક જ મેમરી એક્સેસ (ઓ (1) (અચળ) સમય) ની જરૂર પડે છે, પરંતુ શબ્દમાળાની લંબાઈ 255 અક્ષરો સુધી મર્યાદિત હોય છે. સી ડિઝાઈનર ડેનિસ રિચીએ દોરીની લંબાઈ પરની મર્યાદાને ટાળવા માટે નલ-ટર્મિનેશનની પરંપરાને અનુસરવાનું પસંદ કર્યું અને કારણ કે ગણતરી જાળવી રાખવી, તેમના અનુભવમાં, ટર્મિનેટરનો ઉપયોગ કરતાં ઓછી અનુકૂળ લાગતી હતી. CPU સૂચના સમૂહ ડિઝાઇન પર આનો થોડો પ્રભાવ પડ્યો હતો. 1970 અને 1980ના દાયકામાં કેટલાક સીપીયુ, જેમ કે જિલોગ ઝેડ80 અને ડીઇસી વીએએક્સ, લંબાઈ-પૂર્વનિર્ધારિત તારને સંભાળવા માટે સમર્પિત સૂચનાઓ ધરાવતા હતા. જો કે, જેમ જેમ નલ-ટર્મિનેટેડ સ્ટ્રિંગને ટ્રેક્શન મળ્યું તેમ, CPU ડિઝાઇનરોએ તેને ધ્યાનમાં લેવાનું શરૂ કર્યું, જેમ કે 1992 માં ES/9000 520 માં "લોજિકલ સ્ટ્રિંગ આસિસ્ટ" સૂચનાઓ અને 2015 માં IBM z13 માં વેક્ટર સ્ટ્રિંગ સૂચનાઓ ઉમેરવાના IBM ના નિર્ણયમાં જોવા મળે છે. ફ્રીબીએસડી ડેવલપર પોલ-હેનિંગ કેમ્પે એસીએમ કતારમાં લખતા, 2-બાઈટ (એક-બાઈટ નહીં) લંબાઈ પર નલ-ટર્મિનેટેડ સ્ટ્રિંગ્સની જીતનો ઉલ્લેખ "અત્યાર સુધીની સૌથી મોંઘી એક-બાઈટ ભૂલ" તરીકે કર્યો હતો. મર્યાદાઓ અમલમાં મૂકવા માટે સરળ હોવા છતાં, આ રજૂઆત ભૂલો અને કામગીરીની સમસ્યાઓની સંભાવના ધરાવે છે. શૂન્ય-સમાપ્તિએ ઐતિહાસિક રીતે સુરક્ષા સમસ્યાઓ ઊભી કરી છે. દોરીની મધ્યમાં દાખલ કરાયેલ એન. યુ. એલ. તેને અણધારી રીતે કાપી નાખશે. એક સામાન્ય ભૂલ એન. યુ. એલ. માટે વધારાની જગ્યા ફાળવવાની ન હતી, તેથી તે અડીને આવેલી મેમરી પર લખવામાં આવી હતી. બીજું એ હતું કે એન. યુ. એલ. બિલકુલ ન લખવું, જે ઘણીવાર પરીક્ષણ દરમિયાન શોધી શકાતું ન હતું કારણ કે મેમરીના બ્લોકમાં પહેલેથી જ શૂન્ય હોય છે. લંબાઈ શોધવાના ખર્ચને કારણે, ઘણા પ્રોગ્રામ્સે નિશ્ચિત-કદના બફરમાં સ્ટ્રિંગની નકલ કરતા પહેલા ચિંતા કરી ન હતી, જો તે ખૂબ લાંબુ હોય તો બફર ઓવરફ્લો થાય છે. શૂન્યને સંગ્રહિત કરવાની અસમર્થતા માટે જરૂરી છે કે લખાણ અને દ્વિસંગી માહિતીને અલગ રાખવામાં આવે અને વિવિધ કાર્યો દ્વારા નિયંત્રિત કરવામાં આવે (બાદમાં માહિતીની લંબાઈ પણ પૂરી પાડવાની જરૂર પડે છે). જ્યારે ખોટા કાર્યનો ઉપયોગ કરવામાં આવે ત્યારે આ કોડ રીડન્ડન્સી અને ભૂલો તરફ દોરી શકે છે. લંબાઈ શોધવાની ઝડપ સમસ્યાઓ સામાન્ય રીતે તેને અન્ય ઓપરેશન સાથે જોડીને ઘટાડી શકાય છે જે કોઈપણ રીતે ઓ (એન) છે, જેમ કે સ્ટ્રોલસીપીમાં. જો કે, આ હંમેશા સાહજિક API માં પરિણમતું નથી. અક્ષર એન્કોડિંગ નલ-ટર્મિનેટેડ સ્ટ્રિંગ્સ માટે જરૂરી છે કે એન્કોડિંગ ક્યાંય પણ શૂન્ય બાઈટ (0x00) નો ઉપયોગ ન કરે; તેથી દરેક સંભવિત ASCII અથવા UTF-8 સ્ટ્રિંગને સંગ્રહિત કરવી શક્ય નથી. જો કે, એ. એસ. સી. આઈ. આઈ. અથવા યુ. ટી. એફ.-8 ના સબસેટ-એન. યુ. એલ. સિવાયના દરેક અક્ષર-ને નલ-ટર્મિનેટેડ સ્ટ્રિંગ્સમાં સંગ્રહિત કરવું સામાન્ય છે. કેટલીક સિસ્ટમો "મોડિફાઇડ યુટીએફ-8" નો ઉપયોગ કરે છે જે એનયુએલને બે નોન-ઝીરો બાઇટ્સ (0xC0,0x80) તરીકે એન્કોડ કરે છે અને આમ તમામ સંભવિત શબ્દમાળાઓને સંગ્રહિત કરવાની મંજૂરી આપે છે. યુ. ટી. એફ.-8 ધોરણ દ્વારા આની મંજૂરી નથી, કારણ કે તે એક લાંબુ એન્કોડિંગ છે, અને તેને સુરક્ષા જોખમ તરીકે જોવામાં આવે છે. તેના બદલે અમુક અન્ય બાઈટનો ઉપયોગ સ્ટ્રિંગના અંત તરીકે થઈ શકે છે, જેમ કે 0xFE અથવા 0xFF, જેનો ઉપયોગ UTF-8માં થતો નથી. યુ. ટી. એફ.-16 2-બાઈટ પૂર્ણાંકોનો ઉપયોગ કરે છે અને ક્યાં તો બાઈટ શૂન્ય હોઈ શકે છે (અને હકીકતમાં દરેક અન્ય બાઈટ, જ્યારે એ. એસ. સી. આઈ. આઈ. લખાણનું પ્રતિનિધિત્વ કરે છે), તેને નલ-ટર્મિનેટેડ બાઈટ સ્ટ્રિંગમાં સંગ્રહિત કરી શકાતી નથી. જો કે, કેટલીક ભાષાઓ 16-બીટ યુટીએફ-16 અક્ષરોની સ્ટ્રિંગનો અમલ કરે છે, જે 16-બીટ એનયુએલ (0x0000) દ્વારા સમાપ્ત થાય છે. સુધારાઓ સી સ્ટ્રિંગ હેન્ડલિંગને ઓછી ભૂલપ્રવણ બનાવવાના ઘણા પ્રયાસો કરવામાં આવ્યા છે. એક વ્યૂહરચના એ છે કે એસ. ટી. આર. ડી. યુ. પી. અને એસ. ટી. આર. એલ. સી. પી. આઈ. જેવા સુરક્ષિત કાર્યો ઉમેરવા, જ્યારે ગેટ જેવા અસુરક્ષિત કાર્યોના ઉપયોગની અવગણના કરવી. બીજું એ છે કે સી સ્ટ્રિંગ્સની આસપાસ ઓબ્જેક્ટ-ઓરિએન્ટેડ રેપર ઉમેરવું જેથી માત્ર સલામત કૉલ્સ કરી શકાય. જો કે, અસુરક્ષિત કાર્યોને કોઈપણ રીતે કૉલ કરવું શક્ય છે. મોટાભાગની આધુનિક લાઈબ્રેરીઓ સી સ્ટ્રિંગ્સને 32-બીટ અથવા મોટા લંબાઈ મૂલ્ય ધરાવતી રચના સાથે બદલે છે (લંબાઈ-પૂર્વનિર્ધારિત સ્ટ્રિંગ્સ માટે અગાઉ ક્યારેય માનવામાં આવતું હતું તેના કરતા ઘણું વધારે), અને ઘણીવાર અન્ય નિર્દેશક, સંદર્ભ ગણતરી અને એન. યુ. એલ. પણ સી સ્ટ્રિંગમાં રૂપાંતરને ઝડપી બનાવવા માટે ઉમેરે છે. મેમરી હવે ઘણી મોટી છે, જેમ કે જો દરેક સ્ટ્રિંગમાં 3 (અથવા 16, અથવા વધુ) બાઇટ્સનો ઉમેરો એ એક વાસ્તવિક સમસ્યા છે, તો સોફ્ટવેરને ઘણા નાના સ્ટ્રિંગ્સ સાથે કામ કરવું પડશે જેથી કોઈ અન્ય સંગ્રહ પદ્ધતિ વધુ મેમરીને બચાવશે (દાખલા તરીકે, ત્યાં ઘણા ડુપ્લિકેટ્સ હોઈ શકે છે કે હેશ ટેબલ ઓછી મેમરીનો ઉપયોગ કરશે). ઉદાહરણોમાં C + + સ્ટાન્ડર્ડ ટેમ્પલેટ લાઈબ્રેરી std:: સ્ટ્રિંગ, Qt QSting, MFC CSting, અને C-આધારિત અમલીકરણ CFSting કોર ફાઉન્ડેશન તેમજ તેના ઓબ્જેક્ટિવ-C સિબલિંગ NSSting ફ્રોમ ફાઉન્ડેશન, બંને એપલ દ્વારા સામેલ છે. દોરડા જેવા તારને સંગ્રહિત કરવા માટે વધુ જટિલ માળખાઓનો પણ ઉપયોગ કરી શકાય છે. ખાલી શબ્દમાળા સેન્ટિનેલ મૂલ્ય સંદર્ભો શબ્દમાળા માહિતી માળખાઓ ઇ. એસ.: સી શબ્દમાળા પણ જુઓ.