Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C++Builder zbun

[es] :: C/C++ programiranje :: C++Builder zbun

[ Pregleda: 4157 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.102.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon C++Builder zbun04.09.2002. u 13:31 - pre 263 meseci
Portirao sam neki kod iz Delphi-ja u CBuilder i po nekoliko sati zivciranja(debagiranja) pronasao nesto ovako:
Code:

char* buff;
buff = new char[2];    
iProcitani = FileRead(iFileHandle, buff, 3);
            if(buff =='000')
            {
               ..... bla bla 
            } 


Zasto kod if(buff =='000') kompajler nije reagovao ?
nego je progutao '000' umesto "000", i sta je kompajler uopste
uporedio u ovom slucaju sa pascal style stringom ?
i zasto tretira '000' kao int ?

People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: C++Builder zbun04.09.2002. u 17:29 - pre 263 meseci
Riste, 'b' je isto kao da si napisao 62, u tvom slucaju kompajler je prvo '000' transofrmisao u '0' (apostrofi sluze da se literalno kompajleru da do znanja da hoces da mu "serviras" char vrednost), a '0' je normalno broj 30 :)

Dakle kompajler je uporedio "nesto" (buff) i broj 30 koliko kapiram :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.102.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: C++Builder zbun04.09.2002. u 18:10 - pre 263 meseci
Leko, u nijednoj dokumentacii koju sam citao o C++ nije se pominjao
apostrof, niti pa da 'b' predstavlja ASCII vrednost slova b. Zato sam se
stvarno zacudio kad sam video da uporedjuje if("000"=0).
sad sam isti uslov uradio kao:
if(strcmp("000",buff)=0)

Hvala puno,
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

bm101
Vanja Tesin
Yu/Zr

Član broj: 1961
Poruke: 44
*.zre.sezampro.yu



Profil

icon Re: C++Builder zbun04.09.2002. u 18:46 - pre 263 meseci
Samo jos da dodam, kada vec portujes sa delphija u builder, koristi AnsiString tip, jer si namestio omasku koja se ogleda u tome da si tip *char buff poredio bez iteracije i dereferenciranja, a posto je to "prost" tip u pitanju, ne postoji operator koji bi odradio to na poziv koji si ti imao u kodu:

char *buff;
...
if(buff =='000')

Sto je rezultovalo da kompajler proverava adresu sa brojem 30 (ASCII vrednost 0).

Umesto toga si mogao ovako:

AnsiString buff;

//ucitas podatke u string sa metodom LoadFromFile, ako se ne varam

if (buff == "000") // poziva operator == klase AnsiString

 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
212.110.78.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: C++Builder zbun05.09.2002. u 01:41 - pre 263 meseci
U konkretnoj situaciji nije se mogao iskoristiti AnsiString, jer se nije radilo o obicnog tekst fajla, vec o fajlu sa slogovima razlicitih velicina gde su ona tri bajta koje uporedjujem sa "000" tip sloga koji ima predefiniranu velicinu. Tako morao je biti char* buff, za da se fajl moze parsirati po slogovima. btw, i Delphi kod je isto tako radio sa char buferima
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: C++Builder zbun05.09.2002. u 22:18 - pre 263 meseci
Jeste da ce kompajleri da progutaju ovo (ako koristite string, AnsiString, CString...) jer je operator "==" preopterecen za ove klase... Ali generalno ja uvek u takvim slucajevima koristim strcmp() , jer znam da sve sigurno radi ako moram da kod iskompajliram u nekom "cudnom" kompajleru.

Citat:
bm101:
if (buff == "000") // poziva operator == klase AnsiString


Naravno, ovak kod je okej u C++-u, ali ja to izbegavam.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: C++Builder zbun

[ Pregleda: 4157 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.