Meghatározása vonal hossza c és - verem túlcsordulás az orosz

A fő különbség az, hogy strlen függvény a string hossza, és a sizeof operátor a számítás a vonal hossza semmi köze. sizeof operátor meghatározására használják a memória mérete által elfoglalt entitás. Amikor dolgozik sorok akkor lehet alkalmazni, csak sorok határozzák meg a köteget és állandó vonalak. A mechanizmus művek láthatók a következő példa:

Válaszol november 24 '10 at 00:52

sizeof - az üzemben tartó a nyelv meghatározásához használt adatok típusát mérete bájtban. Az expressziós értékének meghatározása sizeof során meghatározott összeállítása kódot, kivéve néhány esetet, például, a tömbök változó hosszúságú meghatározott C99.

strlen - egy standard könyvtár funkció C, meghatározásához használt vonal hosszát lezáró nulla. A kifejezés értéket strlen hívás határozza futás közben.

Válaszol november 25 '10 at 11:28

Hadd jegyezzem meg, hogy sizeof visszatér a méret byte-ban. Ie Általában a maximális hosszát a húr, amely illeszkedik egy tömb char'ov.

strlen - függvénye a standard könyvtár, hogy meghatározzuk a hossza a 0-végződő karaktersorozat. Visszaadja a karakterek számát megszüntetése nélkül 0. Ez azt jelenti, tényleges memória mennyisége által elfoglalt egy sorban legalább egyenlő az eredmény a teljesítő strlen + 1 byte.

Aktuális problémák jelentkeznek, amikor a Unicode, azaz a típusok vagy wchar TCHAR és a megfelelő F-TIONS. Mivel a Unicode szimbólumok nem foglalnak 1 bájt és 2. És így összekeverni a karakterek száma és mérete a memória, kiderül, hogy nem éri meg. És tekintve, hogy sok program előbb-utóbb meg kell ismételni - ez jobb, hogy megteremtse a lehetőséget erre. Ie teljes - ne feledjük, hogy funkcióban húr manipuláció általában megkövetelik felbontás (vagy méret max.) vonal szimbólumok és funkcióban memória működését - általában byte.

Ahhoz, hogy meghatározzuk a maximális elemek száma (azaz a karakter soronként) alatt MSVC szoktam _countof makró. Azt hittem, elég kényelmes.