TCH (statz) | #1, Főfasz (10443) |
1041 | #42a2 | ^ | Idézet | Mon, 10 Apr 2017 18:04:24 +02 |
94.21.*.* | *.pool.digikabel.hu |
Ezt megint meg tudja valami agyalágyult winfosfan magyarázni, hogy mi a retekkel telibekúrt kurwa anyjáért kell a GetAdaptersInfo(info, &size); parancsot kétszer futtatni??? Pláne úgy, hogy a kettő között van egy allokálás is, ami felül fogja írni a picsába! És ez az elfogadott megoldás, tehát működik! Mi ez?! |
kemi (statz) | #2, Főfasz (2970) |
495 | #42a3 | ^ | Idézet | Mon, 10 Apr 2017 19:15:02 +02 |
188.36.*.* | *.dsl.pool.telekom.hu |
Megjött a MegaDrive, úton van hozzá a Mega Everdrive. Lehet, hogy kicsit felújításra szorul majd, mert a bekapcsoló gombja kicsit kontaktos, RF-en nem ad ki hangot magából, csak berregést (bár ez lehet a TV baja), megoldható, ha rádugok a fejhallgató kimenetre egy pécés hangfalszettet, gyönyörűen szól. Akarok hozzá kompozit A/V kábelt csinálni, de nem találtam európai verzióhoz pinoutot, csak amerikai Genesishez. Szerintetek kompatibilis? |
Ádám (statz) | #4, Főfasz (1815) |
128 | #42a4 | ^ | Idézet | Mon, 10 Apr 2017 19:46:22 +02 |
5.204.*.* | *.pool.telenor.hu |
Na megyek backupolni vissza winfosra, kisbalta 500 gigás hádédé előkészítve, sör behűtve, szóval nem lehet nagy probléma. |
Ádám (statz) | #4, Főfasz (1815) |
600 | #42a5 | ^ | Idézet | Mon, 10 Apr 2017 20:13:04 +02 |
5.204.*.* | *.pool.telenor.hu |
Tudatosult bennem hogy van 80 giga lementendő adatom. De winfos alól nem merek írni, nehogy szarráfagyjon és tönkremenjenek a fontos cuccaim (és aztán nézem, hogy a másolt fájlokból minden ötödik EXE formátumú). De legyen meg minden inkább háromszor is, minthogy valamit elbasszak örökre, én inkább kivárom azt a bő órát amíg winfos bácsi dolgozik (azért nem linuxról csináltam mert csak read-only tudtam volna felcsatolni a cét (amire amúgy most jövök rá hogy másoláshoz elég az is)). Aztán majd meglátom, mi sül ki ebből. A jobb élet reményében bármit, csak szabaduljak meg ettől a fostól örökre... |
TCH (statz) | #1, Főfasz (10443) |
383 | #42a6 | ^ | Idézet | Mon, 10 Apr 2017 21:19:33 +02 |
94.21.*.* | *.pool.digikabel.hu |
Ez hangolási zűr. Rossz sávon vagy. Igen, ugyanaz a kettő. De anno nem hittél nekem. :P |
Ádám (statz) | #4, Főfasz (1815) |
248 | #42a7 | ^ | Idézet | Mon, 10 Apr 2017 21:42:34 +02 |
37.76.*.* | *.nat.pool.telekom.hu |
Most meg nem bútol be a winfos, mert valamit frissítgetett, közbe reseteltem, most meg INACCESSIBLE_BOOT_DEVICE szomorúfejecske. Kurwára nem érdekel mostmár, adatok lementve, ha minden jól megy, még ma vagy holnap felrakom a rencert ami nem trágya. |
gelesztamás (statz) | #24, Balfasz (26) |
1070 | #42a8 | ^ | Idézet | Mon, 10 Apr 2017 22:40:45 +02 |
80.99.*.* | *.catv.broadband.hu |
Nem vagyok winfosfan, de rengeteg C könyvtárban vannak hasonlóan használandó függvények, amiket kétszer kell hívni. Az első hívás azért kell, hogy tudd, mekkora lesz az adat amit visszakapsz a második hívással. Így tudsz pont akkora memóriát foglalni a malloc()-cal, és nem kell feleslegesen nagy memóriát foglalnod vagy túl kicsit, amibe nem fér be az adat. Ez nagyon sok helyen célszerű tud lenni, mert így mindig tudod, hogy mekkora területeket kell foglalni. Például snprintf()-nél is jól jön: char *nev = "Gipsz Jakab"; int kor = 43; /* 1. hívás: csak a célsztring mérete érdekel */ int meret = snprintf(NULL, 0, "Név: %s Életkor: %d", nev, kor); char szoveg[meret+1]; /* a +1 a lezáró nullkarakternek kell */ /* 2. hívás: tényleges kiírás a sztringbe */ snprintf(szoveg, meret+1, "Név: %s Életkor: %d", nev, kor); |
TCH (statz) | #1, Főfasz (10443) |
1816 | #42a9 | ^ | Idézet | Mon, 10 Apr 2017 23:23:48 +02 |
94.21.*.* | *.pool.digikabel.hu |
Tehát akkor általános C gyökérség és nem winfos specifikus, értem. Csak azért, mert semmi értelme, simán lehet tudni a méretet előre is. Ha char*, akkor strlen(), ha meg struct, akkor meg sizeof(). Ami meg a pre-alloc-ot illeti, ezek szerint ez a GetAdaptersInfo(info, &size); úgy működik, hogy ha az info == NULL, akkor csak a méretet adja vissza, ha meg nem, akkor meg oda tölti. Hát ezt meg lehet csinálni úgy is, hogy lenne egy GetAdaptersSize() függvény, meg lenne a GetAdaptersInfo(). De kettébontani is felesleges: mégis mi gátolta meg a GetAdaptersInfo() íróját abban, hogy belül foglaljon memóriát? Akkorát amekkorát kell? // mittudomen hogy mukodik, ez most ilyen pseudo-example
void GetAdaptersInfo(IP_ADAPTER_INFO **info, DWORD *size)
{
*size = GetAdaptersCount() * sizeof(struct _IP_ADAPTER_INFO);
*info = malloc(size);
PutAdapters(*info);
} Azaz tudjuk hány darab ilyen struct van, lefoglalunk pont akkora memóriát és oda írjuk őket. Vissza meg egy (struct **) jön, így lehet megoldani a pointerlistákat.Ehhez képest ez kb. most így nézhet ki belül: void GetAdaptersInfo(IP_ADAPTER_INFO *info, DWORD *size) { if (info == NULL) { *size = GetAdaptersCount() * sizeof(struct _IP_ADAPTER_INFO); } else { PutAdapters(info); } }Gondolom belátható, hogy ennek semmi értelme. Akkor is, ha a mikrofos bűne, akkor is, ha bad C practice. De, hogy adjak másik példát, itt a tied, átírva egylépcsősre: char *nev = "Gipsz Jakab"; int kor = 43; int kl = 1; int kor2 = kor / 10; while (kor2 > 0) { ++kl; kor2 /= 10; } int meret = kl + strlen(nev) + 15; char szoveg[meret+1]; snprintf(szoveg, meret+1, "Név: %s Életkor: %d", nev, kor); |
kemi (statz) | #2, Főfasz (2970) |
431 | #42aa | ^ | Idézet | Tue, 11 Apr 2017 07:40:27 +02 |
188.36.*.* | *.dsl.pool.telekom.hu |
Vigyázz, az strlen az első \0-ig számolja a karaktereket, a sizeof azt adja vissza, ténylegesen mennyit foglal a memóriában. A vágólaptitkosítóval párszor megszívtam, mert base64-be kell konvertálni, hogy pastelhető legyen, és az RC-vel titkosított stringben lehet \0. |
TCH (statz) | #1, Főfasz (10443) |
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. |