У програмуванні нуль-термінований рядок — це рядок символів, що зберігаються у символьному масиві та завершуються [en] ('\0'
у ASCII позначається як NUL). Альтернативна назва — Cі-рядок, якщо це стосується мови програмування Cі та ASCIIZ (варто зауважити, що Cі-рядок не має на увазі використання ASCII). Нуль-термінальні рядки широко використовуються при зверненнях до API-функцій Windows..
Приклад 10-байтного нуль-термінованого рядка у кодуванні Windows-1251:
Р | Я | Д | О | К | NULL | F | % | NULL | 4 |
0xD0 | 0xDF | 0xC4 | 0xCE | 0xCA | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
Історія
Нуль-термінований рядок був створений за допомогою директиви PDP-11 мовою асемблера та директиви
ASCIZ
з використанням мови асемблера для PDP-10.
Вони передують розповсюдженню мови C, але й інші форми рядків часто використовуються.
В той час, коли C (та мови, які від нього походять) розвивалися, пам'ять була вкрай обмежена, тому використання всього одного зайвого рядка для збереження довжини рядка було привабливою ідеєю. Єдина, популярна на той момент, альтернатива називалася «Рядок Pascal» (хоча використовувалась вона і у ранніх версіях BASIC). Вона використовувала перший байт, щоб зберігати довжину рядка. Такий спосіб дозволяє записати значення NUL (довжини рядка) надсилаючи лише один сигнал до пам'яті. В цьому випадку не потрібно спеціального термінатора для позначення кінця рядка. З іншого боку, тут на довжину рядка накладається обмеження, пов'язане з місткістю нульового елемента масиву, тобто у випадку з однобайтовими елементами довжина рядка не може перевищувати 255 символів. Нуль-терміновані рядки до такого обмеження не схильні і теоретично можуть зберігати рядки будь-якої довжини.
Нуль-терміновані однобайтові рядки
Нуль-термінований однобайтовий рядок (null-terminated byte string, NTBS) — послідовність ненульових байтів з наступним байтом з нульовим значенням (термінальний нульовий символ). Кожен байт в однобайтовому рядку кодує один символ деякого набору символів. Наприклад, символьний масив {'\ x63', '\ x61', '\ x74', '\ 0'} — NTBS, що зберігає рядок «cat» в кодуванні ASCII. В таблиці наведено символи, їх класифікацію та функції, що вони виконують.
Класифікація символів у нуль-термінованих однобайтових рядках
- isalnum — перевіряє, чи є символ буквою або цифрою;
- isalpha — перевіряє, чи є символ буквою;
- islower — перевіряє, чи є символ строчною буквою;
- isupper — перевіряє, чи є символ великою буквою;
- isdigit — перевіряє, чи є символ цифрою;
- isxdigit — перевіряє, чи є символ шістнадцятковою цифрою;
- isgraph — перевіряє, чи є символ графічним;
- isprint — перевіряє, чи є символ друкованим;
- ispunct — перевіряє, чи є символ пунктуаційним;
- isblank — перевіряє, чи є символ порожнім;
Деякі особливості
- Символи після нуль-символу називаються сміттям — це дані, які могли залишитися в буфері від попередніх рядків або від інших використань пам'яті. Серед них також можуть перебувати нульові символи.
- Довжина C-рядка зберігається в останньому (NUL) байті. NUL позначає кінець рядка, таким чином він не може знаходитись всередині.
- Для посилання на нуль-термінований рядок застосовується перший її символ. Це простий, швидкий і гнучкий підхід, але не виключені помилки. Щоб їх уникнути, програміст постійно повинен стежити за своїм кодом, а саме:
- бути упевненим, що не трапляються переповнення буфера;
- акуратно проводити управління пам'яттю, що виділяється під рядки;
- стежити за коректною нуль-термінацією рядків при використанні функцій, які її не гарантують;
- в рідкісних випадках, коли розмір рядка може бути дуже великий, стежити, що не відбувається переповнювання цілого при підрахунку довжини та інших пов'язаних з довжиною обчисленнях.
Крім того, деякі операції з рядками, наприклад, конкатенація, для нуль-термінованих рядків виконуються повільніше, ніж для інших типів рядків.
Примітки
- . Архів оригіналу за 4 листопада 2014. Процитовано 3 листопада 2014.
- Нуль-терминальные однобайтовые строки (RU)
Див. також
Ця стаття потребує додаткових для поліпшення її . (березень 2017) |
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U programuvanni nul terminovanij ryadok ce ryadok simvoliv sho zberigayutsya u simvolnomu masivi ta zavershuyutsya en 0 u ASCII poznachayetsya yak NUL Alternativna nazva Ci ryadok yaksho ce stosuyetsya movi programuvannya Ci ta ASCIIZ varto zauvazhiti sho Ci ryadok ne maye na uvazi vikoristannya ASCII Nul terminalni ryadki shiroko vikoristovuyutsya pri zvernennyah do API funkcij Windows Priklad 10 bajtnogo nul terminovanogo ryadka u koduvanni Windows 1251 R Ya D O K NULL F NULL 4 0xD0 0xDF 0xC4 0xCE 0xCA 0x00 0x46 0x25 0x00 0x34IstoriyaNul terminovanij ryadok buv stvorenij za dopomogoyu direktivi PDP 11 movoyu asemblera ta direktivi ASCIZ z vikoristannyam movi asemblera dlya PDP 10 Voni pereduyut rozpovsyudzhennyu movi C ale j inshi formi ryadkiv chasto vikoristovuyutsya V toj chas koli C ta movi yaki vid nogo pohodyat rozvivalisya pam yat bula vkraj obmezhena tomu vikoristannya vsogo odnogo zajvogo ryadka dlya zberezhennya dovzhini ryadka bulo privablivoyu ideyeyu Yedina populyarna na toj moment alternativa nazivalasya Ryadok Pascal hocha vikoristovuvalas vona i u rannih versiyah BASIC Vona vikoristovuvala pershij bajt shob zberigati dovzhinu ryadka Takij sposib dozvolyaye zapisati znachennya NUL dovzhini ryadka nadsilayuchi lishe odin signal do pam yati V comu vipadku ne potribno specialnogo terminatora dlya poznachennya kincya ryadka Z inshogo boku tut na dovzhinu ryadka nakladayetsya obmezhennya pov yazane z mistkistyu nulovogo elementa masivu tobto u vipadku z odnobajtovimi elementami dovzhina ryadka ne mozhe perevishuvati 255 simvoliv Nul terminovani ryadki do takogo obmezhennya ne shilni i teoretichno mozhut zberigati ryadki bud yakoyi dovzhini Nul terminovani odnobajtovi ryadkiNul terminovanij odnobajtovij ryadok null terminated byte string NTBS poslidovnist nenulovih bajtiv z nastupnim bajtom z nulovim znachennyam terminalnij nulovij simvol Kozhen bajt v odnobajtovomu ryadku koduye odin simvol deyakogo naboru simvoliv Napriklad simvolnij masiv x63 x61 x74 0 NTBS sho zberigaye ryadok cat v koduvanni ASCII V tablici navedeno simvoli yih klasifikaciyu ta funkciyi sho voni vikonuyut Klasifikaciya simvoliv u nul terminovanih odnobajtovih ryadkah isalnum pereviryaye chi ye simvol bukvoyu abo cifroyu isalpha pereviryaye chi ye simvol bukvoyu islower pereviryaye chi ye simvol strochnoyu bukvoyu isupper pereviryaye chi ye simvol velikoyu bukvoyu isdigit pereviryaye chi ye simvol cifroyu isxdigit pereviryaye chi ye simvol shistnadcyatkovoyu cifroyu isgraph pereviryaye chi ye simvol grafichnim isprint pereviryaye chi ye simvol drukovanim ispunct pereviryaye chi ye simvol punktuacijnim isblank pereviryaye chi ye simvol porozhnim Deyaki osoblivostiSimvoli pislya nul simvolu nazivayutsya smittyam ce dani yaki mogli zalishitisya v buferi vid poperednih ryadkiv abo vid inshih vikoristan pam yati Sered nih takozh mozhut perebuvati nulovi simvoli Dovzhina C ryadka zberigayetsya v ostannomu NUL bajti NUL poznachaye kinec ryadka takim chinom vin ne mozhe znahoditis vseredini Dlya posilannya na nul terminovanij ryadok zastosovuyetsya pershij yiyi simvol Ce prostij shvidkij i gnuchkij pidhid ale ne viklyucheni pomilki Shob yih uniknuti programist postijno povinen stezhiti za svoyim kodom a same buti upevnenim sho ne traplyayutsya perepovnennya bufera akuratno provoditi upravlinnya pam yattyu sho vidilyayetsya pid ryadki stezhiti za korektnoyu nul terminaciyeyu ryadkiv pri vikoristanni funkcij yaki yiyi ne garantuyut v ridkisnih vipadkah koli rozmir ryadka mozhe buti duzhe velikij stezhiti sho ne vidbuvayetsya perepovnyuvannya cilogo pri pidrahunku dovzhini ta inshih pov yazanih z dovzhinoyu obchislennyah Krim togo deyaki operaciyi z ryadkami napriklad konkatenaciya dlya nul terminovanih ryadkiv vikonuyutsya povilnishe nizh dlya inshih tipiv ryadkiv Primitki Arhiv originalu za 4 listopada 2014 Procitovano 3 listopada 2014 Nul terminalnye odnobajtovye stroki RU Div takozhRyadok programuvannya Porozhnij ryadok Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2017 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi