Valamenyikőtök tudna erre megoldást mondani, vagy leírni, hogy miért így viselkedik.
Köszönettel: raron
- raron blogja
- A hozzászóláshoz be kell jelentkezni
- 1019 megtekintés
Hozzászólások
hogy van az a h_sock megnyitva?
nem lehet, hogy a sender karakterenkent kuldi?
hogy van deklaralva a buf?
Egyebkent tok gaz az egesz kodolasi technika, nehanapjan ezer oraig debuggolhatod, amikor a visszateresi ertek -1, ciklusban nagyonsokszor
- A hozzászóláshoz be kell jelentkezni
Egyebkent tok gaz az egesz kodolasi technika
Hogy lehetne szépen megírni? (esetleg tudnál ilyennel foglalkozó oldalt vagy könyvet ajánlani?)
- A hozzászóláshoz be kell jelentkezni
Operator sorrendre ugyelj. Itt egy lista pl: http://www.difranco.net/cop2220/op-prec.htm
while(a = recv(h_sock, buf+bufindex, sizeof(buf)-bufindex, 0) != 0)
Eloszor a jobb oldal (!= ket oldala) ertekelodik ki, ami 1, ha volt adat.
Helyesen: while((a = recv(h_sock, buf+bufindex, sizeof(buf)-bufindex, 0)) != 0)
Persze ezen nem valtoztat hogy tobb visszateresi ertekre kellene ugyelned.
- A hozzászóláshoz be kell jelentkezni
+1
tipikus "aljas" hiba, ha az ember nem szokik ra a zarojelezesre, akkor halado koraban is elkoveti.
- A hozzászóláshoz be kell jelentkezni
Ezt lehet elkerulni olyan modon, hogy bal oldalra teszed a konstanst (asszem ezt Joel is plusznak vette az egyik bejegyzeseben)
if(0==a) vs. if(0=a) // igy ha tenyleg osszehasonlitani akarod, akkor a masodik szolni fog, mig ha a=0 lenne, szo nelkul futna
while(0==(a=f())) // itt ha nem teszed ki a zarojelt, akkor sem csinalhat hulyeseget
--
The iPad: Because the iPhone was too small for other people to notice you.
- A hozzászóláshoz be kell jelentkezni
A binding-ot (kötést, zárójelezést) és a kiértékelés sorrendjét (evaluation order) gyakran össze szokták keverni, ill. össze szokták mosni. Ez C-ben nagyon pontatlan. Az operator binding (zárójelezés) azt határozza meg, hogy milyen operátor milyen operandusokkal dolgozik. Az operandusok kiértéklési sorrendje ettől teljesen független (modulo funkcionális függőségek).
Példa:
a() + b() * c()
esetén a három függvény tetszőleges sorrendben hívódhat meg.
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen, erre nem is gondoltam.
- A hozzászóláshoz be kell jelentkezni
dupla
- A hozzászóláshoz be kell jelentkezni
dupla
- A hozzászóláshoz be kell jelentkezni
Mellesleg:
Ha a recv() hibát ad (-1), akkor eggyel hátralépsz az indexszel és mész tovább, ebből csúnya elszállások lehetnek. Külön kéne kezelni ezt az esetet.
A sizeof(buf) meg nyilván csak akkor működik, ha a buf char[]-ként van definiálva, ha ő egy char* (mondjuk mallocolt terület), akkor nem jó.
- A hozzászóláshoz be kell jelentkezni