En nulltermineret streng eller C-streng (fra navnet på C-sproget ) eller ASCIIZ-streng er en måde at repræsentere strenge på i programmeringssprog, hvor en række tegn bruges i stedet for at introducere en speciel strengtype, og første specielle nul-tegn (NUL fra ASCII , med værdi 0).
For eksempel, i en strengbuffer (hukommelsesområde tildelt til lagring af en streng) med en størrelse på 11 bytes, kan en null-termineret streng "STRING" i Windows-1251- kodning repræsenteres som følger:
FRA | T | R | O | Til | MEN | NUL | F | % | NUL | fire |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
I dette eksempel er et hukommelsesområde på 11 bytes repræsenteret, selvom linjen i virkeligheden kun optager 7. Tegnene efter nul-tegnet (8 - 11 bytes) kaldes skrald - dette er data, der kan være blevet i bufferen fra tidligere linjer eller fra anden brug af hukommelse. De kan også indeholde nul-tegn.
Når du bruger enkeltbyte- kodninger ( ASCII ), er mængden af hukommelse, der kræves for at repræsentere en streng med N tegn, N + 1 bytes. Når Unicode bruges til at kode tegn , afhænger længden af strengen af den anvendte Unicode-repræsentation (f.eks. 2N + 2 bytes til UCS-2 ).
Sådanne strenge er standard i C og nogle andre programmeringssprog. Fordi de bruges til at sende strengargumenter til standardfunktioner i mange operativsystemer, er operationer til håndtering af null-terminerede strenge dukket op på Pascal og andre sprog.
For at henvise til en null-termineret streng, bruges en pointer til dens første tegn. Dette er en enkel, hurtig og fleksibel tilgang, men fejltilbøjelig [1] [2] . Programmøren skal konstant overvåge sin kode, nemlig:
Nogle strengoperationer, såsom sammenkædning , er også langsommere for null-terminerede strenge end for andre strengtyper.
Et alternativ til null-terminerede strenge er de metoder, der anvendes i Pascal og moderne OOP-sprog. I Pascal starter strengen ved det første element i arrayet, og længden af strengen er gemt i null-elementet. I dette tilfælde kræves der ingen speciel terminator for at markere slutningen af linjen. På den anden side er strenglængden her begrænset af kapaciteten af nul-elementet i arrayet, det vil sige, at i tilfælde af enkeltbyte-elementer må længden af strengen ikke overstige 255 tegn. Nullterminerede strenge er ikke underlagt denne begrænsning og kan teoretisk opbevare strenge af enhver længde. Objektorienterede sprog gemmer en post med længden af en streng og en reference (eller pointer) til en række tegn. Disse metoder lider ikke af ulempen ved null-terminerede strenge: de kan gemme nul-tegn uden forvrængning og speciel kodning.
En række grænseflader bruger dobbelt-nul-terminerede strenge, hvis termineringstegnet er to på hinanden følgende nul-terminatorer [3] .
For at arbejde med nulterminerede strenge bruger programmeringssproget C en række funktioner :
Nogle varianter af assemblersprog bruger et særligt direktiv til at definere NUL-terminerede strenge. Så i GNU Assembler er der et direktiv .asciz[4] [5] for dette .
C programmeringssprog | |
---|---|
Kompilere |
|
Biblioteker | |
Ejendommeligheder | |
Nogle efterkommere | |
C og andre sprog |
|
Kategori:C programmeringssprog |