Kezdőoldal » Számítástechnika » Programozás » Hogyan értelmezhető az alábbi...

Hogyan értelmezhető az alábbi sor C++ programnyelvben?

Figyelt kérdés

É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?



2016. ápr. 12. 20:19
 1/6 anonim ***** válasza:
100%
A '\0' a C-s karakterlánc végét jelölő karakter. Feltételezem, hogy az tomb egy karaktertömb, és annak a végére helyezi el a lezáró karaktert.
2016. ápr. 12. 20:22
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
Ha ott valóban az elemek száma áll és nem mondjuk a karakterek száma, vagy elemekSzama-1, akkor ez a sor túlindexel, egyébként ahogy az #1-es is írta, a karakterlánc végét jelző lezáró 0-t írja be.
2016. ápr. 12. 20:38
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
100%

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.

2016. ápr. 12. 20:49
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
Természetesen a stringet illik előnyben részesíteni, ami tárolja a saját hosszát. Amennyiben fordítási időben van szükség rá, ott van az array megoldásként.
2016. ápr. 12. 21:17
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

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.

2016. ápr. 14. 09:51
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Érten, köszönöm a válaszokat!
2016. ápr. 14. 10:12

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!