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

ciscenje memorije u C jeziku !!!

[es] :: C/C++ programiranje :: ciscenje memorije u C jeziku !!!

[ Pregleda: 4347 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

brankec
Bosanski Brod

Član broj: 140157
Poruke: 161
*.teol.net.



Profil

icon ciscenje memorije u C jeziku !!!19.02.2008. u 20:05 - pre 196 meseci
Sledeci programcic sam napisao kako bi mogao u jednu promenjivu izvuci IME a u drugu PREZIME (ime i prezime su u char IMEIPREZ). Problem mi je u tome sto prilikom ispisa na ekran osim imena i prezimena pojavljuju mi se jos neki znaci. Uzecu donji primer

IME = stanko 6 b ╩
PREZIME = misic ↑

Taj problem mogu resiti ako na pocetku inicijalizujem vrednosti sa NULL (npr. ime[7]=NULL), ali mi deluje nezgrapno. Da li iko ima bolje resenje. Nadam se da sam bio jasan.
Hvala unapred.

Code:

#include <stdio.h>
main()
{
char imeiprez[30]={'m','i','s','i','c',' ','(',' ','s','t','a','n','k','o'};
char ime[15],prezime[15];
int i,j;
i=0;
while(imeiprez[i]!=' ')
    {
    prezime[i]=imeiprez[i];
    i+=1;
    }
i+=1;
while(imeiprez[i]!=' ')
    i++;
i+=1;
j=0;
while(imeiprez[i]!= 0x00)
    {
    ime[j]=imeiprez[i];
    i+=1;
    j+=1;
    }
printf("\nIME     = %c%c%c%c%c%c%c%c%c%c",ime[0],ime[1],ime[2],ime[3],ime[4],
        ime[5],ime[6],ime[7],ime[8],ime[9]);
printf("\nPREZIME = %c%c%c%c%c%c%c%c%c%c",prezime[0],prezime[1],prezime[2],
        prezime[3],prezime[4],prezime[5],prezime[6],prezime[7],
        prezime[8],prezime[9]);
getchar();
}


[Shadowed: dodati [code] tagovi.]

[Ovu poruku je menjao Shadowed dana 19.02.2008. u 21:23 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 20:27 - pre 196 meseci
Sunce ti, kakav program!!!

Jel ti vera brani da koristiš stringove i for petlje?
 
Odgovor na temu

brankec
Bosanski Brod

Član broj: 140157
Poruke: 161
*.teol.net.



Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 20:55 - pre 196 meseci
Kao prvo : pocetnik sam u programiranju.
Kao drugo : ovaj programcic mi je orjentir za druge (mozda malo slozenije) programe.

Kao trece : cilj mi je iz DBF baze ucitati podatke i onda ih obradjivati. Zasto ne koristim string? Jer ne znam kako bih drugacije procitao (recimo u mom slucaju) podatke o imenu i prezimenu (IMEIPREZ) velicine 30 bajta. Citam ih bajt po bajt i samo radi sebe (kontrole) prikazujem te podatke na ekranu. U exe verziji nece mi trebati.
Ali reci mi kako da koristim stringove u ovom slucaju. Morao bih dodavati nul znak('\0') i onda bih zakomplikovao.
Ili ima jednostavnije resenje.
Sto se tice FOR petlje to cu morati sto pre izmeniti - vera mi to dopusta.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:00 - pre 196 meseci
brankec, pretpostavljam da bih mogao da ti popravim ovaj kod da ispisuje tacno ime i prezime, ali je sam dizajn koji si pokazao jako los.

Mozda je najbolje da kazes sta zapravo hoces da postignes.

Bolje je napisati kod ponovo nego popravljati ono sto nije u startu nije dobro.

Sta ti je ZAGRADA izmedju imena i prezimena? Pretpostavljam da ti treba kod koji eliminise zagradu i uzima ono sa strana bez blankova...
Zasto si za ime i prezime predvideo 15 karaktera a hardkodiras ih u kodu (u ispisu) na 10? Sta kad imas manje od 10 slova u imenu ili prezimenu?
Zasto string uopste ispisujes kao karaktere?

Sto se tice inicijalizacije sa NULL, tu nema nista rogobatno. Ovo ce oba niza napuniti nulama u startu i eliminisati slucajan sadrzaj + ograniciti niz (da ne doje do buffer overun):
char ime[15]={0},prezime[15]={0};

 
Odgovor na temu

laki_srt
laki_srt
ucenik

Član broj: 166987
Poruke: 183
*.tippnet.co.yu.



Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:05 - pre 196 meseci
zar je ovo tako napredna stvar:
char prezime[]={"misic"};?
ili ovo:
printf("PREZIME:%s",prezime);
btw x+=1 je isto sto i x++
i sta bi ovo predstavljalo:while(imeiprez[ i ]!= 0x00)???


 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:10 - pre 196 meseci
To je HEX oznaka za NULL ili jednostavno 0 ;)
 
Odgovor na temu

brankec
Bosanski Brod

Član broj: 140157
Poruke: 161
*.teol.net.



Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:12 - pre 196 meseci
Moram priznati da sam nespreman izasao na forum i zbog toga se izvinjavam i trudicu se da se ovo vise ne ponovi.

Jedan deo sam objasnio prethodnom porukom a jos pojasnjenja sledi:

Cilj mi je da uzmem određene podatke iz DBF baze, obradim ih i zapisem u .EPP formatu (za poreku prijavu) u kojem recimo IME i PREZIME imaju odredjenu velicinu (recimo 15 bajta). u IMEIPREZ su podaci zapisani tako da (NAJCESCE) prvo ide prezime, pa ime oca u zagradi i ime (ali uvek ima dva razmaka sto sam koristio u uslovu).

Sto se tice inicijalizacije ja sam mislio da treba svaki bajt pojedinacno pa ce mi puno pomoci tvoj primer (char ime[15]={0},prezime[15]={0};).
 
Odgovor na temu

laki_srt
laki_srt
ucenik

Član broj: 166987
Poruke: 183
*.tippnet.co.yu.



Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:20 - pre 196 meseci
sto se tice tvog program ti stampas ime npr sa 5 slova a u if si stavio 8puta %c,znaci odstampa ovo ime i ono sto je u memoriji,sto si i sam shvatio. moj savet ti je da prelistas malo tu tvoju knjigu(ako ucis iz neke knjige )
i potrazis lekciju stringovi,veruj mi skratices sebi muke.
i nevezano za ovu temu
sta bi ovo znacilo : a/=b/; sta mu dode ovo /?
 
Odgovor na temu

brankec
Bosanski Brod

Član broj: 140157
Poruke: 161
*.teol.net.



Profil

icon Re: ciscenje memorije u C jeziku !!!19.02.2008. u 21:55 - pre 196 meseci
Evo resen problem
Code:

#include <stdio.h>
main()
{
char imeiprez[30]={'m','i','s','i','c',' ','(',' ','s','t','a','n','k','o'};
char ime[15]={0},prezime[15]={0};
int i,j;
i=0;
for(i=0;imeiprez[i]!=' ';prezime[i]=imeiprez[i],i++);
i+=1;
for(;imeiprez[i]!=' ';i++);
i+=1;
for(j=0;imeiprez[i]!=0;ime[j]=imeiprez[i],i++,j++);

printf("\nIME     = %s",ime);
printf("\nPREZIME = %s",prezime);

getchar();
}

Hvala svima na pomoci.


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:

[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]


[Ovu poruku je menjao X Files dana 27.02.2008. u 18:11 GMT+1]
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.ns.ac.yu.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: ciscenje memorije u C jeziku !!!27.02.2008. u 08:34 - pre 196 meseci
Trebao si da koristis CODE tag-ove, ovako gde si u programu stavljao i kao index elementa ti je to prebacilo u italic font-ove.
 
Odgovor na temu

[es] :: C/C++ programiranje :: ciscenje memorije u C jeziku !!!

[ Pregleda: 4347 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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