En nollterminerad sträng eller C-sträng (från namnet på C-språket ) eller ASCIIZ-sträng är ett sätt att representera strängar i programmeringsspråk, där en uppsättning tecken används istället för att introducera en speciell strängtyp, och första speciella nolltecken (NUL från ASCII , med värde 0).
Till exempel, i en strängbuffert (minnesområde tilldelat för lagring av en sträng) med en storlek på 11 byte, kan en nollterminerad sträng "STRING" i Windows-1251- kodning representeras enligt följande:
FRÅN | T | R | O | Till | MEN | NUL | F | % | NUL | fyra |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
I det här exemplet representeras ett minnesområde på 11 byte, även om raden i verkligheten bara upptar 7. Tecknen efter nolltecknet (8 - 11 byte) kallas skräp - det här är data som kan ha stannat kvar i bufferten från tidigare rader eller från annan användning av minne. De kan också innehålla nolltecken.
När du använder enkelbyte- kodningar ( ASCII ) är mängden minne som krävs för att representera en sträng med N tecken N + 1 byte. När Unicode används för att koda tecken beror längden på strängen på vilken Unicode-representation som används (till exempel 2N + 2 byte för UCS-2 ).
Sådana strängar är standard i C och vissa andra programmeringsspråk. Eftersom de används för att skicka strängargument till standardfunktioner i många operativsystem har operationer för att hantera nollterminerade strängar dykt upp på Pascal och andra språk.
För att referera till en nollterminerad sträng används en pekare till dess första tecken. Detta är ett enkelt, snabbt och flexibelt tillvägagångssätt, men felbenäget [1] [2] . Programmeraren måste ständigt övervaka sin kod, nämligen:
Vissa strängoperationer, såsom sammanlänkning , är också långsammare för nollterminerade strängar än för andra strängtyper.
Ett alternativ till nollterminerade strängar är de metoder som används i Pascal och moderna OOP-språk. I Pascal börjar strängen vid det första elementet i arrayen, och längden på strängen lagras i null-elementet. I det här fallet krävs ingen speciell terminator för att markera slutet på raden. Å andra sidan, här begränsas stränglängden av kapaciteten hos nollelementet i arrayen, det vill säga, i fallet med enkelbyteelement, får strängen inte överstiga 255 tecken. Nollterminerade strängar är inte föremål för denna begränsning och kan teoretiskt lagra strängar av vilken längd som helst. Objektorienterade språk lagrar en post med längden på en sträng och en referens (eller pekare) till en rad tecken. Dessa metoder lider inte av nackdelen med nollterminerade strängar: de kan lagra nolltecken utan förvrängning och speciell kodning.
Ett antal gränssnitt använder dubbel-null-terminerade strängar, vars avslutningstecken är två på varandra följande noll-terminatorer [3] .
För att arbeta med nollterminerade strängar använder programmeringsspråket C ett antal funktioner :
Vissa varianter av assemblerspråk använder ett speciellt direktiv för att definiera NUL-terminerade strängar. Så i GNU Assembler finns det ett direktiv .asciz[4] [5] för detta .
C programmeringsspråk | |
---|---|
Kompilatorer |
|
Bibliotek | |
Egenheter | |
Några ättlingar | |
C och andra språk |
|
Kategori:C programmeringsspråk |