Nollapäätteinen merkkijono

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).

Kuvaus

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.

Vertailu vaihtoehtoihin

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] .

C-kielellä

Työskennelläkseen nollapääteisten merkkijonojen kanssa C - ohjelmointikieli käyttää useita toimintoja :

Assemblykielellä

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 .

Katso myös

Muistiinpanot

  1. Joel ohjelmistosta - Takaisin perusteisiin (linkki ei ole käytettävissä) . Haettu 17. syyskuuta 2016. Arkistoitu alkuperäisestä 25. syyskuuta 2016. 
  2. Kallein yhden tavun virhe - ACM-jono . Haettu 17. syyskuuta 2016. Arkistoitu alkuperäisestä 19. syyskuuta 2016.
  3. Mikä on kaksoisnollapäätteisen merkkijonon muoto, jossa ei ole merkkijonoja? Arkistoitu 13. helmikuuta 2019 Wayback Machinessa / MSDN:ssä, 2009
  4. GNU assemblerin käyttö: Kokoonpanoohjeet . Haettu 17. syyskuuta 2016. Arkistoitu alkuperäisestä 17. syyskuuta 2016.
  5. Arkistoitu kopio . Haettu 17. syyskuuta 2016. Arkistoitu alkuperäisestä 17. syyskuuta 2016.

Kirjallisuus

Linkit