2.9.2 Lisää loppumerkistä

Määrittelyn

char paikkakunta[] = "Jyväskylä";

jälkeen siis merkkijonomuuttujan paikkakunta sisältönä on

Loppumerkin (= nollatavu) valinta ei ole täysin sattumanvarainen, sillä kokonaislukuarvo 0 vastaa totuusarvoa epätosi (false). Näin ollen merkkijonon loppu on helposti tunnistettavissa ehto- ja toistorakenteissa. Esimerkiksi seuraavalla koodinpätkällä saadaan kopioitua merkkijono toiseen:

char jono[] = "Jyväskylä";
char kopio[80];
int i = 0;
while (jono[i]) {     // toistetaan niin kauan kuin jono[i]!='\0'
  kopio[i] = jono[i];
  i++;                // siirrytään seuraavaan merkkiin
}
kopio[i] = '\0';      // huomaa loppumerkin kopiointi!

Tietenkin tässä voitaisiin while-lauseen ehto korvata ehdolla (jono[i]!='\0'), joka on tosin hiukan pidempi kuin pelkkä (jono[i]), mutta toisaalta se on havainnollisempi.

Loppumerkin vuoksi merkkijonoon on aina muistettava varata yksi merkki enemmän tilaa, kuin maksimitarve edellyttäisi. Sanan "kukkuu" tallentaminen siis vaatii 7 merkkiä:

'k' 'u' 'k' 'k' 'u' 'u' '\0'

Tyhjä merkkijono saadaan aikaan sijoittamalla ensimmäiseksi merkiksi loppumerkki:

char jono[80];
jono[0] = '\0';

Loppumerkin voi sijoittaa tarvittaessa keskellekin merkkijonoa, jolloin merkkijono "katkeaa":

char nimi[80] = "TaneliTomera";
nimi[6] = '\0';   // nimi == "Taneli"

Mikä on merkkijonon mjono sisältönä seuraavien lauseiden jälkeen?
char mjono[10] = "alku";
mjono[5] = '\0';
mjono[1] = '\0';
mjono[0] = '\0';

Kääntäjän puolesta on samantekevää, vaikka 20 merkin merkkijonoon kirjoitetaan 40 merkkiä pitkä teksti. Tekstin ylimenevää osaa ei katkaista tai jätetä huomiotta, vaan se kirjoitetaan koneen muistiin merkkijonolle varatun tilan jatkoksi, välittämättä lainkaan siitä, mitä tällä alueella aiemmin oli tallennettuna. Merkkijonon pituuden huomioimatta jättäminen on hyvin tavallinen virhe, joka pahimmillaan kaataa koko ohjelman ja jopa jumiuttaa koko koneen.

Esimerkiksi, jos esitellään 10 merkin pituinen merkkijonomuuttuja paikkakunta, ja sijoitetaan siihen liian pitkä merkkijono "Jyväskylän maalaiskunta", menevät ylimääräiset merkit paikkakunta-muuttujalle varatun muistialueen jatkoksi. Se, että kaatuuko ohjelma, onkin sitten onnesta kiinni.