Nollapäätteinen merkkijono tai C-merkkijono ( C-kielen nimestä ) tai ASCIIZ-merkkijono on tapa esittää merkkijonoja ohjelmointikielissä, jossa käytetään merkkijonoa sen sijaan, että ottaisi käyttöön erityistä merkkijonotyyppiä, ja ensimmäinen erikoisnullamerkki ( NUL ASCII -koodista , arvolla 0).
Esimerkiksi merkkijonopuskurissa (merkkijonon tallentamiseen varattu muistialue), jonka koko on 11 tavua, nollapäätteinen merkkijono "STRING" Windows-1251- koodauksessa voidaan esittää seuraavasti:
FROM | T | R | O | Vastaanottaja | MUTTA | NUL | F | % | NUL | neljä |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
Tässä esimerkissä esitetään 11 tavun muistialue, vaikka todellisuudessa rivi vie vain 7. Nollamerkin jälkeisiä merkkejä (8 - 11 tavua) kutsutaan roskiksi - tämä on data, joka on voinut jäädä puskuriin aiemmista riveistä tai muista muistin käyttötavoista. Ne voivat sisältää myös nollamerkkejä.
Yksitavuisia koodauksia ( ASCII ) käytettäessä N merkin merkkijonon esittämiseen tarvittava muisti on N + 1 tavua. Kun Unicodea käytetään merkkien koodaamiseen , merkkijonon pituus riippuu käytetystä Unicode-muodosta (esimerkiksi 2N + 2 tavua UCS-2 :lle ).
Tällaiset merkkijonot ovat vakiona C :ssä ja joissakin muissa ohjelmointikielissä. Koska niitä käytetään välittämään merkkijonoargumentteja vakiofunktioille monissa käyttöjärjestelmissä , nollapääteisten merkkijonojen käsittelyyn liittyviä toimintoja on ilmestynyt Pascalissa ja muissa kielissä.
Nollapääteiseen merkkijonoon viitattaessa käytetään osoitinta sen ensimmäiseen merkkiin. Tämä on yksinkertainen, nopea ja joustava lähestymistapa, mutta virhealtis [1] [2] . Ohjelmoijan on jatkuvasti seurattava koodiaan, nimittäin:
Myös jotkin merkkijonotoiminnot, kuten ketjutus , ovat hitaampia nollapäätteisille merkkijonoille kuin muille merkkijonotyypeille.
Vaihtoehto nollapäätteisille merkkijonoille ovat Pascalissa ja nykyaikaisissa OOP-kielissä omaksutut menetelmät. Pascalissa merkkijono alkaa taulukon ensimmäisestä elementistä ja merkkijonon pituus tallennetaan nollaelementtiin. Tässä tapauksessa ei tarvita erityistä päätettä merkitsemään rivin loppua. Toisaalta tässä merkkijonon pituutta rajoittaa taulukon nollaelementin kapasiteetti, eli yksitavuisten elementtien tapauksessa merkkijonon pituus ei saa ylittää 255 merkkiä. Tämä rajoitus ei koske nollapääteisiä merkkijonoja, ja ne voivat teoriassa tallentaa minkä tahansa pituisia merkkijonoja. Oliopohjaiset kielet tallentavat tietueen, jossa on merkkijonon pituus ja viittaus (tai osoitin) merkkijonoon. Nämä menetelmät eivät kärsi nollapääteisten merkkijonojen haitoista: ne voivat tallentaa nollamerkkejä ilman vääristymiä ja erityistä koodausta.
Useat rajapinnat käyttävät kaksoisnolla-pääteisiä merkkijonoja, joiden päätemerkki on kaksi peräkkäistä nollapäätettä [3] .
Työskennelläkseen nollapääteisten merkkijonojen kanssa C - ohjelmointikieli käyttää useita toimintoja :
Jotkut kokoonpanokielen maut käyttävät erityistä direktiiviä NUL-päätteisten merkkijonojen määrittelemiseen. Joten GNU Assemblerissä on ohje .asciz[4] [5] tätä varten .
C-ohjelmointikieli | |
---|---|
Kääntäjät |
|
Kirjastot | |
Erikoisuudet | |
Jotkut jälkeläiset | |
C ja muut kielet |
|
Luokka: C-ohjelmointikieli |