[ Hallman @ 21.02.2004. 14:01 ] @
Problem je sledeci:
Koristim obicnu CSocket klasu kako bih napravio program za otvaranje sadrzaja mail servera. Znaci sve lepo radi, konektujem se, aktivira se "OnRecieve" event, kreiram "CString data" pa zatim pokusam da preuzmem sarzaj sledecom metodom (naravno unutar OnRecieve):
ret = this->Receive (data.GetBuffer (256), 256);
Ja dobijem ono sto sam ocekivao "+OK", ali nije bas tako. Verovatno zbog memorije, na kraju stringa (bilo CString ili obican char, sa pokazivacem ili ne... opet isto) dobijem ovo:
+OK
ĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚ
Sto je vrlo nezeljen rezultat, ovo ispod je spojeno sa stringom ali nije deo njega, za duzinu stringa mi daje 0, standardne funkcije klase CString ne funkcionisu (ne rade bas nista). Duzina te mrlje ispod varira u zavisnosti od same velicine promenljive, i od 2. parametra funkcije Recieve (256 u ovom slucaju). Znam c++ tek neke dve nedelje, poznajem turbo c, i vb odlicno, pa me ovo zbunjuje, jer se ta mrlja uvek prikazuje zajedno sa stringom ali ne postoji u njemu (ne moze se ukloniti nikako). Cak kada kopiram taj CString u nesto drugo (recimo char[3]) dobijam ISTO to, iako taj char ima samo 3 slobodna mesta. Mozda je ovo standardna glavobolja c++ stringova, a mozda i neki winsocket bug zbog loseg rukovanja (samo sam ga napravio, i konektovao se, sta lose moze da bude...). A povratna vrednost funkcije daje duzinu stringa (5 tj. 3 vidljiva karaktera ovde), ali ne vredi kad mi ubaci ovaj "bug" us string, ironija.
POMAGAJTE !
[ filmil @ 21.02.2004. 15:01 ] @
Da li možeš da pošalješ najkraći mogući kod koji pokazuje gde je
problem? Malo šta se može zaključiti metodom „gledanja u ništa“.

Evo međutim nekoliko primedbi dobijenih metodom „gledanja u ništa“:

Da li si pogledao šta tačno rade metode Receive i GetBuffer? Da
li uvek vraćaju tačno onoliko bajtova koliko si tražio (256) ili možda
vraćaju uredno formatiran CString? Da li si siguran da data.GetBuffer()
koristiš na pravi način, ja recimo nisam.

To što je neka promenljiva char[3] ne sprečava da na to mesto upišeš
koliko god hoćeš znakova. Mali je problem što će to upisivanje da
potamani sve nesrećne promenljive koje su se u memoriji našle iza tog mesta.

f
[ yooyo @ 22.02.2004. 22:20 ] @
Ako imas MSDN pogledaj primer u CAsyncSocket::OnReceive.

yooyo