Řetězec zakončený nulou nebo C-řetězec (z názvu jazyka C ) nebo ASCIIZ-řetězec je způsob reprezentace řetězců v programovacích jazycích, ve kterém se místo zavedení speciálního typu řetězce používá pole znaků a první speciální znak null (NUL z kódu ASCII s hodnotou 0).
Například v řetězcové vyrovnávací paměti (paměťová oblast alokovaná pro ukládání řetězce) o velikosti 11 bajtů může být řetězec zakončený nulou „STRING“ v kódování Windows-1251 reprezentován následovně:
Z | T | R | Ó | Na | ALE | NUL | F | % | NUL | čtyři |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
V tomto příkladu je znázorněna paměťová oblast 11 bajtů, i když ve skutečnosti řádek zabírá pouze 7. Znaky za nulovým znakem (8 - 11 bajtů) se nazývají odpadky - to jsou data, která mohla zůstat ve vyrovnávací paměti z předchozích řádků nebo z jiného využití paměti. Mohou také obsahovat prázdné znaky.
Při použití jednobajtových kódování ( ASCII ) je množství paměti potřebné k reprezentaci řetězce N znaků N + 1 bajtů. Když se ke kódování znaků používá Unicode , délka řetězce závisí na použité reprezentaci Unicode (například 2N + 2 bajty pro UCS-2 ).
Takové řetězce jsou standardní v C a některých dalších programovacích jazycích. Protože se v mnoha operačních systémech používají k předávání řetězcových argumentů standardním funkcím , objevily se v Pascalu a dalších jazycích operace pro práci s řetězci ukončenými nulou.
K odkazování na řetězec ukončený nulou se používá ukazatel na jeho první znak. Jedná se o jednoduchý, rychlý a flexibilní přístup, ale náchylný k chybám [1] [2] . Programátor musí neustále sledovat svůj kód, a to:
Také některé operace s řetězci, jako je zřetězení , jsou pro řetězce ukončené nulou pomalejší než pro jiné typy řetězců.
Alternativou k řetězcům ukončeným nulou jsou metody přijaté v Pascalu a moderních jazycích OOP. V Pascalu začíná řetězec na prvním prvku pole a délka řetězce je uložena v prvku null. V tomto případě není potřeba žádný speciální terminátor pro označení konce řádku. Na druhou stranu je zde délka řetězce omezena kapacitou nulového prvku pole, to znamená, že v případě jednobajtových prvků nesmí délka řetězce přesáhnout 255 znaků. Řetězce zakončené nulou nepodléhají tomuto omezení a teoreticky mohou ukládat řetězce libovolné délky. Objektově orientované jazyky ukládají záznam s délkou řetězce a odkazem (nebo ukazatelem) na pole znaků. Tyto metody netrpí nevýhodou řetězců zakončených nulou: mohou ukládat nulové znaky bez zkreslení a speciálního kódování.
Řada rozhraní používá řetězce zakončené dvojitou nulou, jejichž koncovým znakem jsou dva po sobě jdoucí nulové konce [3] .
Pro práci s řetězci ukončenými nulou používá programovací jazyk C řadu funkcí :
Některé varianty jazyka symbolických instrukcí používají speciální direktivu k definování řetězců zakončených NUL. Takže v GNU Assembler existuje směrnice .asciz[4] [5] pro toto .
C programovací jazyk | |
---|---|
Kompilátory |
|
Knihovny | |
Zvláštnosti | |
Někteří potomci | |
C a další jazyky |
|
Kategorie:C programovací jazyk |