A húr hossza a strlen ()
A húr hossza a strlen ()
Az előző fejezetben a művelet méretét kevés vagy semmilyen magyarázat adta. amely megadja nekünk az objektumok méretét byte-ban A strlen () függvény lehetővé teszi számunkra, hogy meghatározzuk a karakterlánc hosszát a karakterek számával. Mivel 1 bájt van hozzárendelve a memóriában egy karakter elosztásához, feltételezhető, hogy e két művelet egyikének ugyanazon a vonalon történő alkalmazása következtében ugyanazt az eredményt kapjuk meg. Kiderült, hogy ez nem így van. Csináljunk egy kicsit a korábbi programunkat (adjunk hozzá néhány sort ehhez), majd meg fogjuk érteni, mi a baj.
#define PRAISE "Ez az, milyen nagy név!"
printf ("Mi a neve? n");
printf ("Hello,% s.% sn" név, PRAISE);
printf ("A neved tartalmaz" betűket és felveszi a "memóriacellákat". "n",
strlen (név), névméret);
printf ("A dicséret kifejezés:., betűkből áll", strlen (PRAISE));
printf ("és hozza meg a memória cellákat: n", size of PRAISE);
Vegyük észre, hogy véletlenül két módszert használtunk a hosszú printf () utasítások feldolgozására. Az első esetben egy nyomtatási nyilatkozatot írunk a program két sorában. Ezt azért tettük, mert megengedhetjük, hogy megszakítsunk egy sort az érvek között, de nem a sor közepén. A másik esetben két printf () operátort használtunk egy sor nyomtatásához; az "új sor" (n) karaktert csak a másodikban adtuk meg. Az alábbiakban bemutatott program munkájának eredménye segít megérteni ezt a helyzetet:
Hello, Perks. Igen, milyen nagy név!
Az Ön neve 5 betűből áll és 50 memóriacellát foglal el.
A dicséret kifejezés 35 betűből áll, és 36 memóriacellát foglal el.
Lássuk, mi a baj. A tömb neve 50 memóriakártyát vesz fel, és ez pontosan az operáció méretének jelentése. A Perks név tárolásához azonban csak az első öt cellára van szükség, és a strlen () függvény csak tájékoztat minket. A tömb neve hatodik cellája null karaktert tartalmaz, és megjelenése a strlen () függvény jelzésére szolgál,
Ábra 4.4. A strlen () függvény felismerése a vonal végén
Amikor áttérünk a PRAISE konstans feldolgozására, azt találjuk, hogy a strlen () függvény ismét megadja a karakterlánc pontos számát (beleértve a szóközöket és a központozást). A művelet méretének eredménye egy nagynak tűnik, mivel ez figyelembe veszi a sor végén lévő "láthatatlan" null szimbólumot. Nem mondjuk meg a fordítónak, hogy mennyi memóriát kell felosztania a teljes kifejezés kielégítésére, maga számítja ki az idézőjelek közötti karakterek számát.
Az előző fejezetben még egy megjegyzés volt a művelet sizeof zárójelekkel történő használata, ebben az esetben - nélkülük. A zárójelek használata vagy attól függetlenül attól függ, hogy szeretné-e megismerni az adott típusú elemhez rendelt memória mennyiségét vagy az adott objektum által elfoglalt memória mennyiségét, az első esetben a sizeof (char) vagy a sizeof (float) értéket írná. és a második méretben a név vagy a méret 6.28.