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

Da li je ovo normalno?

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

[ Pregleda: 2152 | 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


Profil

icon Da li je ovo normalno?01.08.2001. u 22:51

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.
01.08.2001. u 22:51 

kajla
Milorad Janković
Beograd

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



Profil

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

poz.
01.08.2001. u 23:15 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: Da li je ovo normalno?04.08.2001. u 11:37
Laptopovi

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)
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
04.08.2001. u 11:37 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: Da li je ovo normalno?04.08.2001. u 11:40
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.
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
04.08.2001. u 11:40 

Milan Aksic

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



Profil

icon Re: Da li je ovo normalno?04.08.2001. u 12:38
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.
04.08.2001. u 12:38 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: Da li je ovo normalno?04.08.2001. u 21:33
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)
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
04.08.2001. u 21:33 

kajla
Milorad Janković
Beograd

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



Profil

icon Re: Da li je ovo normalno?04.08.2001. u 22:42
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]
04.08.2001. u 22:42 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

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

Sajt: nonenone.net


Profil

icon Re: Da li je ovo normalno?06.08.2001. u 16:55
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?
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
06.08.2001. u 16:55 

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

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

Sajt: www.mycity.rs


Profil

icon Re: Da li je ovo normalno?07.08.2001. u 00:11
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
07.08.2001. u 00:11 

tOwk
Danilo Šegan
Zemun/Beograd

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

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


Profil

icon Re: Da li je ovo normalno?07.08.2001. u 00:55
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.
07.08.2001. u 00:55 

Milan Aksic

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



Profil

icon Re: Da li je ovo normalno?07.08.2001. u 07:30
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.
07.08.2001. u 07:30 

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

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

Sajt: www.mycity.rs


Profil

icon Re: Da li je ovo normalno?07.08.2001. u 14:53
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?
07.08.2001. u 14:53 

tOwk
Danilo Šegan
Zemun/Beograd

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

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


Profil

icon Re: Da li je ovo normalno?07.08.2001. u 15:25
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.
07.08.2001. u 15:25 

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

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

Postavi temu Odgovori

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