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

Da li je ovo normalno?

[es] :: C/C++ programiranje :: Da li je ovo normalno?

[ Pregleda: 3729 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.42.EUnet.yu

Sajt: www.mycity.rs


+1 Profil

icon Da li je ovo normalno?01.08.2001. u 22:51 - pre 276 meseci
char *primer (char *parametar) {
parametar="aaaaaa";
return "nesto"; // nije bitno u ovom slucaju
}

int main () {
char *promenljiva1, *promenljiva2;
promenljiva1="bbbbb";
promenljiva2 = primer (promenljiva1);
}

----------------

...i sada promenljiva1 daje "aaaaaaa" !!!!!
Da li je ovo normalno???

Jednom recju, kada se u funkciji izmeni parametar, izmeni se i
promenljiva koja stoji dole u main proceduri.

Samo sto kod mene nije main nego
int WINAPI WinMain()
jer pisem Win32 aplikaciju.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: Da li je ovo normalno?01.08.2001. u 23:15 - pre 276 meseci
Probaj da ides sa strcpy() umesto sa =.

poz.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: Da li je ovo normalno?04.08.2001. u 11:37 - pre 276 meseci
Citat:
zastita je napisao:
Code:

char *primer (char *parametar) {
parametar="aaaaaa";
return "nesto";            // nije bitno u ovom slucaju
}

int main () {
char *promenljiva1, *promenljiva2;
promenljiva1="bbbbb";
promenljiva2 = primer (promenljiva1);
}



Ako sam ja dobro razumeo tebi promenljiva1 posle funkcije primer() pokazuje na "aaaaaaa" ?
Ako je to onda je to GRESKA u kompajleru koji koristis.Zasto ?

POINTER se predaje funkciji da bi se neko mesto u memoriji menjalo,ali mi ne mozemo da promenimo adresu na koju ce pointer da pokazuje.U ovom slucaju se bas to radi.

Na adresi 0x12345678 se nalazi "bbbbbbb" i mi predajemo funkciji adresu da bi eventualno mogli da menjamo ili pristupimo sadrzaju te memorije.Ako se uradi :

pointer = "aaaaaaaaa" pointeru se daje nova vrednost (adresa 0x11223344) i samim tim se menja pointer. To je isto kao da imate int i promenite ga u funkciji ali se on ne menja van te funkcije.
Ispravno bi bilo koriscenje strcpy() koju uzima dve memorijske adrese i kopira sa druge na prvu do pojave "\0" znaka.
Nadam se da smo ovim resili sve probleme?
Tako da Peca-o menjaj taj kompiler koji koristis ;o)
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: Da li je ovo normalno?04.08.2001. u 11:40 - pre 276 meseci
Ovo menjanje pointer moze samo da vazi dok ta funkcija radi a posle otpada.

Uvek se sadrzaj priomenljive gurne na stack pa se onda poziva funkcija tako da nikakve sanse nema da se promenjen argument u toku funkcije promeni i van nje.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Da li je ovo normalno?04.08.2001. u 12:38 - pre 276 meseci
Eh ja prevideo, da nisi koristio operator dereferenciranja, znaci kao sto kaze preda dodelio novu vrednost. Samo mi je malo cudno to dodeljivanje mesta u memoriji pokazivacu tipa:
char *ptr;
// i sada bez dereferenciranja
ptr = "aaaa"
Kada bi se npr. pravio string onda je ispravno *ptr = "aaaa", i onda ptr pokazuje na prvi karakter, a ovde se dodeljuje memorija ptr = "aaaa", da li tako nesto radi, zar prevodioc ne bi trebalo da prijavi gresku ???
Poz.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: Da li je ovo normalno?04.08.2001. u 21:33 - pre 276 meseci
Citat:
passanger je napisao:
Eh ja prevideo, da nisi koristio operator dereferenciranja, znaci kao sto kaze preda dodelio novu vrednost. Samo mi je malo cudno to dodeljivanje mesta u memoriji pokazivacu tipa:
char *ptr;
// i sada bez dereferenciranja
ptr = "aaaa"
Kada bi se npr. pravio string onda je ispravno *ptr = "aaaa", i onda ptr pokazuje na prvi karakter, a ovde se dodeljuje memorija ptr = "aaaa", da li tako nesto radi, zar prevodioc ne bi trebalo da prijavi gresku ???


Ne naime C stringove tipa "aaaaaa" tretira kao memorijsku adresu.Zapravo oni se nalaze negde u DATA segmentu.Kao sto svi znamo string je skup znakova terminiran sa \0.Znaci u ovom slucaje se taj skup znakova(string) smesta u memoriju a pokazivacu se dodeljuje adresa od prvog znaka.

prema tome char *gg="string"; je ispravno za razliku od
char *gg;
*gg = "aaaaaa"; to je greska jel ti sa ovim kazes sledece smesti string "aaaaa" u DATA segment i adresu prebaci na memorijsku lokaciju na koju pokazuje gg (ovde bi trebalo da se prebaci samo poslednji byte adrese posto je intel little endian system ;o)
Sad ne znam koliko je jasno ovo sto sam reko,ali ako ima nekih nejasnoca recite da odma to rascistimo ;o)
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.136.EUnet.yu



+2 Profil

icon Re: Da li je ovo normalno?04.08.2001. u 22:42 - pre 276 meseci
pa da treba ici sa strcpy(gg,"string") umesto sa gg="string", jer kao sto rece ti u varijablu stavljas adresu stringa.

poz.


[Ovu poruku je menjao kajla dana 08-04-2001 u 10:44 PM GMT]
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: Da li je ovo normalno?06.08.2001. u 16:55 - pre 276 meseci
Pa da strcpy sa jedne adrese kopira na drugu do pojave 0x00 znaka tj. \0. A ovo gg="aaaaaa" dodeljuje adres i to je VELIKA RAZLIKA !!!!!!!! Nadam se da smo resili sve probleme sa ovim?
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.57.EUnet.yu

Sajt: www.mycity.rs


+1 Profil

icon Re: Da li je ovo normalno?07.08.2001. u 00:11 - pre 276 meseci
Ja koristim Borlandov c/c++ kompaljer 5.5.1, ali onaj free, sto kompajlira se iz komandne linije.
Adresa je ftp://ftpd.borland.com/downloa...ilder/freecommandLinetools.exe - 8mb.

Jel' znas da mi to radi i sa char [], uopste ne mora da bude pointer
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Da li je ovo normalno?07.08.2001. u 00:55 - pre 276 meseci
Citat:
zastita je napisao:
Ja koristim Borlandov c/c++ kompaljer 5.5.1, ali onaj free, sto kompajlira se iz komandne linije.
Adresa je ftp://ftpd.borland.com/downloa...ilder/freecommandLinetools.exe - 8mb.

Jel' znas da mi to radi i sa char [], uopste ne mora da bude pointer :)


char[] je u stvari char*, tj. sam niz je tada definisan kao char*, prema tome i tada je pointer.

npr.
Code:

char pera[]="ubiti ga";
char *sima;

sima=pera;


Ovde ce i sima pokazivati na isti string, nikakvih gresaka nema, potpuno ispravan kod. Medjutim, pera[5] je ponekad lepse od *(sima+5), pa se zato i koriste takve oznake.

Toliko.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Da li je ovo normalno?07.08.2001. u 07:30 - pre 276 meseci
Samo bih dodao, mada se mozda podrazumeva, ali radi detaljnog objasnjenja. Ime niza je i sam, konstantni pokazivac na prvi element u njegovom nizu. Jedina razlika izmedju obicnog char* pokazivaca i imena niza je sto, se ime niza ne moze promeniti da pokazuje na nesto drugo osim na prvi element.
Pozdrav.
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.54.EUnet.yu

Sajt: www.mycity.rs


+1 Profil

icon Re: Da li je ovo normalno?07.08.2001. u 14:53 - pre 276 meseci
Ne kazem za
char nesto[]
nego za
char nesto[10]

Hoces da kazes da je i to pointer?
Hmmm, postoji li onda tip kao str ili string?
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.etf.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Da li je ovo normalno?07.08.2001. u 15:25 - pre 276 meseci
Da i to je pointer.

A taj tip i jeste tip kao string, a ukoliko ti to ne odgovara, onda ti definisi tvoj tip.

Mozes cak i da napravis Pascal style string, samo u str[0] smesti duzinu, medjutim, onda ces imati problema sa ispisivanjem ovog stringa i slicno. U C-u se neke stvari ne skrivaju od programera (kao sto je to slucaj u Pascalu gde je string u stvari isto niz znakova koji pocinje sa duzinom stringa, a ovakav string moze imati najvecu duzinu od 255 znakova).

Ukoliko ti ne lezi sintaksa C-a, uvek su tu programski jezici viseg nivoa: Perl, Python, Java, ObjectPascal...

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Da li je ovo normalno?

[ Pregleda: 3729 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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