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

Kako rade neke funkcije u C

[es] :: C/C++ programiranje :: C/C++ za početnike :: Kako rade neke funkcije u C

[ Pregleda: 2038 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Jordan90
student

Član broj: 294595
Poruke: 52
*.dynamic.sbb.rs.



Profil

icon Kako rade neke funkcije u C08.02.2012. u 15:34 - pre 148 meseci
Evo da pitam za neke(meni nejasne) funkcije u C....

Funkcijamalloc .... ja na samom pocetku definisem text = malloc(sizeof(char)*15) i ubacim neki string od 10 znakova i to je ok (jer sam odredio da moze 15 charova) ,a kad promenim
text = malloc(sizeof(char)*5) opet normalno ispisuje string od 10 znakova.... U cemu je onda poenta ako se nista nije izmenilo?? kako uopste funkcionise malloc()? I gde da proverim velicinu programa?

funkcijamemmove... Nije mi jasno kako radi,tj kako siftuje i pomera znakove u stringu?

Hvala
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Kako rade neke funkcije u C08.02.2012. u 16:01 - pre 148 meseci
malloc vraća pointer na bafer koji se dalje može koristiti, i na kraju rada mora osloboditi sa free. Kad se malloc pozove drugi put onda vraća pointer na drugi bafer. Veličina bafera je data u parametru funkcije. Ako program piše nešto izvan ovog bafera onda se stručno rečeno desi nedefinisano ponašanje (undefined behavior). Nedefinisano ponašanje ne znači da će program javiti grešku, niti da će prestati sa radom. Nedefinisano ponašanje može da znači da nikad nećeš videti ni osetiti grešku, ali to ti prosto nije zagarantovano. Ako imaš sreće desiće se nešto dramatično, i to odmah pošto se desilo nedefinisano ponašanje. Ako nemaš sreće neće se desiti ništa tokom razvoja i testiranja programa kod tebe, ali kod kupca program će se čudno ponašati i proizvoditi misteriozne probleme u radu. To je najgore, a ništa ti ne garantuje da će se nedefinisano ponašanje manifestovati isto na različitim računarima, okruženjima, pa čak i na istom računaru u različito doba dana.

memmove kopira bajtove od nazad, ako utvrdi da je to potrebno.
 
Odgovor na temu

Jordan90
student

Član broj: 294595
Poruke: 52
*.dynamic.sbb.rs.



Profil

icon Re: Kako rade neke funkcije u C09.02.2012. u 15:18 - pre 148 meseci
Za malloc mi je jasno,samo u kojim slucajevima se ona koristi?Jel pri svakom stringu ili ima nesto odredjeno,npr da se definise na pocetku i onda da se na kraju samo oslobodi ili alocira?

A za memmove,mi bas i nije najjasnije,guglao sam ali i dalje ne kapiram. Npr imam neki string " Hello world ",a hocu da dobijem string bez tih space-ova na pocetku i na kraju,tj "Hello world",kako bi u tom slucaju glasila memmove()? Inace sam zakljucio da ovo moze biti vrlo korisna i primenjiva funkcija ako znas da je iskoristis :)

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Kako rade neke funkcije u C09.02.2012. u 15:53 - pre 148 meseci
I malloc i memmove se koriste onda kad ti trebaju. Ne postoji nikakav zakon koji kaže da se malloc koristi samo na nekom mestu, u neko vreme. Kad ti treba novi bafer pozovi malloc. I ne zaboravi da sa free oslobodiš memoriju koji si dobio uz pomoć malloca.

Nemam običaj da memmove koristim za stringove, ali u ovom slučaju to bi izgledalo nekako ovako:

Code:
char hello[] = " Hello world ";
memmove(hello, hello + 1, 11);
hello[11] = '\0';


Efekat poziva memmove ovde je da se niz od 11 znakova "Hello world" (bez nul terminatora) iskopira na početak bafera hello i tako prebriše prvi spejs. Bafer hello koji je veličine 14 znakova (11 + 2 spejsa + nul terminator) posle operacije memmove izgleda ovako "Hello worldd <nul>" (ovde sam sa <nul> označio da bafer sadrži nul terminator na kraju). Ono drugo "d" je ostalo od ranije. Kad se u sledećem koraku postavi i nul terminator tamo gde treba bafer hello izgleda ovako "Hello world<nul> <nul>". Prilikom rada sa stringovima gleda se sadržaj samo do prvog nul terminatora, pa kad se ovaj bafer ispiše na ekranu vidi se samo "Hello world".
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Kako rade neke funkcije u C

[ Pregleda: 2038 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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