Hogyan értelmezhető az alábbi sor C++ programnyelvben?
Érdekelne hogyan értelmezhető az alábbi sor C++ programnyelvben:
tomb[elemekSzama] = '\0';
Egészen pontosan a '\0' részére gondolok. Mit csinál a tömbbel?
Na hogy érthető legyen a probléma. Tegyük fel, hogy van a memória, ami most így néz ki:
fgiflbdfhbkgsdfhubvhkbdhsufgzrubvruszvugaevrwtrkgvfurhabgvau
És mi azt mondjuk, hogy valamely helyre be akarom azt írni, hogy "Ez egy teszt szöveg."
A gép annyit tud csinálni, hogy kiszámítja, mekkora helyre van ehhez szüksége a memóriában, azt lefoglalja nekünk, majd megadja, hogy ez a terület hol kezdődik. Ezt követően arra a helyre beilleszti nekünk ezt a szöveget. Így fog kinézni a memória:
fgiflbdfhbkgsdfhubvhkbEz egy teszt szöveg.vrwtrkgvfurhabgvau
Tehát, mit tudunk? Azt, hogy a szövegünk a memóriában hol kezdődik. De hoppá! Meddig tart a szöveg? Meddig kell olvasnunk? Ezt kétféleképpen oldhatnánk meg:
1) Nekünk mindig tudnunk kell, hogy hol ér véget a szöveg.
2) Valamilyen speciális jellel jelezzük, hogy hol ér véget a szöveg.
Az első megoldás az nagyon karaj lenne, ha minden szöveget mi kezelnénk. Csakhogy mi van akkor, ha jön a drága felhasználó és beír nekünk valamit? Na akkor az Isten sem mondja meg, hol ér véget a felhasználó által megadott szöveg. Szóval így józan paraszti ésszel a második változatot fogjuk használni. Vagyis egy speciális jellel jelezzük, hogy hol ér véget a szöveg. Ez lesz az az ominózus \0 karakter.
Ha ezt használom, így fog kinézni a memória:
fgiflbdfhbkgsdfhubvhkbEz egy teszt szöveg.\0vrwtrkgvfurhabgvau
Továbbra is csak annyit tudok, hogy hol kezdődik a szöveg, viszont addig lépek a következő karakterre, amíg a \0-ba belefutok. És ott abbahagyom.
A kérdéseben lévő példa egy üres sztringet definiál, vagyis csak a lezáró \0 karaktert tette bele. Ennek hiányában egy sztring olvasó függvény a tömbben lévő memóriaszemetet olvasná be, amíg valahol \0 karaktert nem találna.
Pl:
'Alma\0'
'Körte\0'
'\0' (üres sztring)
A \0 a nulla értéket jelenti, tehát nem a '0' karaktert, hanem a 0 numerikus értéket. (0x00) A C-ben (is) ez jelzi a sztringek végét. Ahogy fentebb írták, a C++ string osztály ezt megoldja maga, ott nem kell ilyenekkel foglalkozni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!