TCH (statz) | #1, Főfasz (10466) |
1335 | #42ab | ^ | Idézet | Tue, 11 Apr 2017 09:24:39 +02 |
94.21.*.* | *.pool.digikabel.hu |
Tudom, hogy a strlen() az első \0-ig megy, de szerinted a sprintf()-ben a %s mit fog csinálni? Ugyanazt. A sizeof() meg nem adja vissza, hogy egy char * ténylegesen mennyit foglal le a memóriából, a sizeof() nem függvény, hanem operátor, amit ha egy char *-ra hívsz meg, akkor az architektúrától függően 2, 4 vagy 8 lesz amit visszaad (a pointer mérete). Ha olyan stringed van, amiben lehet \0, akkor annak a méretét neked kell tudnod és allokálgatnod. De a sprintf()-ben a %s az NUL terminated string, tehát jó rá a strlen(). Sz*rk: Ha egy pointer alatti terület méretére vagy kiváncsi, akkor non-standard függvények vannak csak rá: • malloc_usable_size() a glibc-s rendszereken • malloc_size() OSX-en • _msize() winfoson, ami természetesen jó mikrofos módra bugos mint atom és még fundamentally broken is. |