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

struktura i pokazivaci pitanje

[es] :: C/C++ programiranje :: struktura i pokazivaci pitanje

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BoLa
Software Developer
Sarajevo

Član broj: 7535
Poruke: 78
*.wifi-01.sa.lol.ba.



Profil

icon struktura i pokazivaci pitanje14.11.2004. u 16:45 - pre 236 meseci
imam sljedecu strukturu:
typedef struct cl_st {
unsigned int cid;
char ime[25] ;
char prezime [25];
char adresa [128];
char brtel [10] ;
char brlk [10] ;
struct cl_st *next;
} clan;

e sada, zelim da formiram stack, tj. jednostavnu povezanu listu.

kada uradim sljedece
clan *clan_s=NULL;

clan_s = (clan *)malloc( sizeof(clan));
clan->ime = "neki tekst";

dobijem gresku da nije Lvalue. zasto?
ps:dalje nisam pisao, formiranje liste sa push i to, jer ne razumjem zasto ovo ne radi?
 
Odgovor na temu

Sardon
Novi Sad

Član broj: 13372
Poruke: 59
212.200.107.*



+7 Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 16:55 - pre 236 meseci
Poslednji red
clan_s->ime = "neki tekst";
 
Odgovor na temu

BoLa
Software Developer
Sarajevo

Član broj: 7535
Poruke: 78
*.wifi-01.sa.lol.ba.



Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 17:08 - pre 236 meseci
Uh izvinjavam se, tako mi i pise u programu nisam dobro napisao u postu:
clan_s->ime = "tekst";

ali stvar ne funkcionise!?
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.vdial.verat.net.

ICQ: 60630914


+1 Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 17:55 - pre 236 meseci
tako se ne prave aeroplani... u ovom slucaju bi radilo:

memcpy(clan_s->ime, "neki tekst\0", 11);

u principu je nespretno drzati char buffer-e fixne velicine u strukturi, ali ako vec to moras da radis pazi da uvek ostavis prostora za jedan \0 i pazi na velicinu buffer-a i teksta koji u njega kopiras, posto ako budes kompajlirao kod sa nekim optimizacijama, lako bi moglo da se desi da takav overrun utice na rad aplikacije (da ne ulazimo u pricu o security-u, blah, blah), posto ce alocirani page-ovi biti sabijeni - sto moze rezultovanti nasty memory access problemima koji mogu biti veoma problematicni za debagovanje.

 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 18:01 - pre 236 meseci
ili strcpy, gde nije potrebno da specificiraš dužinu stringa, već on kopira do prvog terminating ('\0') znaka. Mada i kod ovog važe iste napomene koje ti je i caboom dao.
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.vdial.verat.net.

ICQ: 60630914


+1 Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 18:49 - pre 236 meseci
ja bih ipak zaobilazio strcpy... strncpy je bolji izbor posto nece kopirati vise od N bajtova, ali je opet prilicno bitno baratati sa \0-ovima kada je bilo sta sa char*-ovima u pitanju, moze ustedeti mnogo glavobolja.
 
Odgovor na temu

BoLa
Software Developer
Sarajevo

Član broj: 7535
Poruke: 78
*.wifi-01.sa.lol.ba.



Profil

icon Re: struktura i pokazivaci pitanje14.11.2004. u 18:53 - pre 236 meseci
hvala.

ma u biti ja imam zadatak da napravim neku aplikaciju za biblioteke koja koristit datoteke za smjestanje podataka uz upotrebu jednostruko spregnutih lista. eh sad, ja znam normalno uraditi to sa nizovima struktura bez problema, ali eto oko ovakvih stvari ne znam.

kako biste vi definisali strukturu?

i ah da, to mi je zadatak iz seminarskog :D
 
Odgovor na temu

zvrba
The Lord of Chaos

Član broj: 31716
Poruke: 105
*.fina.hr.



Profil

icon Re: struktura i pokazivaci pitanje15.11.2004. u 08:26 - pre 236 meseci
Citat:
caboom: ja bih ipak zaobilazio strcpy... strncpy je bolji izbor posto nece kopirati vise od N bajtova, ali je opet prilicno bitno baratati sa \0-ovima kada je bilo sta sa char*-ovima u pitanju, moze ustedeti mnogo glavobolja.


strncpy je tek nesretan izbor. on pak nekad zapise \0, a nekad ne, ovisno o tome je li mu buffer bio dovoljno velik! UNIX man stranica kaze:

Citat:
The strncpy(3) copies not more than len characters into dst, appending \0 characters if src is less than len characters long, and not terminating dst if src is more than len characters long.
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
80.93.230.*

ICQ: 60630914


+1 Profil

icon Re: struktura i pokazivaci pitanje15.11.2004. u 12:18 - pre 236 meseci
poenta je to da ne treba da prepustas terminisanje stringa nekoj od postojecih stdlibc f-ja, vec da to moras da uradis sam... cisti strcpy je sjajan nacin da napravis buffer overrun.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: struktura i pokazivaci pitanje15.11.2004. u 13:01 - pre 236 meseci
Citat:
sam... cisti strcpy je sjajan nacin da napravis buffer overrun.
strncpy? A, da, kada je dužina stringa tačno jednaka n, onda ne postavlja NUL na kraj stringa, pa je opet potrebna intervencija.

Hm, čemu li služe uopšte funkcije iz runtime biblioteke?

f

[Ovu poruku je menjao filmil dana 15.11.2004. u 15:18 GMT+1]
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
80.93.230.*

ICQ: 60630914


+1 Profil

icon Re: struktura i pokazivaci pitanje15.11.2004. u 13:44 - pre 236 meseci
da, ali sta se desava ako sa strcpy pregazis buffer? u debug modu cesto nista, ali radosne stvari krecu da se desavaju sa npr. nekim optimizacijama. lakse je rucno zalepiti '\0', nego posle potrositi i nekoliko dana buljenja u debugger-u i raznim purify alatima da bi video sta se tacno desilo, pogotovo ako baratas slozenijim api-em i enkapsulacijama. sve u svemu, divni svet C-a i memorije.
 
Odgovor na temu

BoLa
Software Developer
Sarajevo

Član broj: 7535
Poruke: 78
*.wifi-01.sa.lol.ba.



Profil

icon Re: struktura i pokazivaci pitanje16.11.2004. u 13:49 - pre 236 meseci
Da ne bi otvarao novi topic pitat cu na ovome. Zasto u sljedecem kodu, upisuje se posljednji elemenat 2 puta u datoteku!? Naveo sam samo funkcije koje sam napisao za upis i ispis bez main() u kojem ih pozivam ... NIkako da skontam gdje sam pogrijesio ...

struct clanovi
{
int id;
char ime[20];
};


void upisdat(char ime[20])
{
FILE *Dat;
struct clanovi tmpc;

Dat = fopen(ime,"a");
if (Dat !=NULL)
{
puts("ID: ");
scanf("%d",&tmpc.id);
puts("Ime: ");
scanf("%s",&tmpc.ime);
fwrite(&tmpc,sizeof(tmpc),1,Dat);
}
else exit(1);

fclose(Dat);
}

void ispisdat(char ime[20])
{
FILE *Dat;
struct clanovi tmpc;

Dat = fopen(ime,"r");
if (Dat!=NULL)
{
puts("rezultati ispisa");
while (!feof(Dat))
{
fread(&tmpc,sizeof(tmpc),1,Dat);
printf("\n Id %d, ime %s \n",tmpc.id,tmpc.ime);
}
}
fclose(Dat);
}

 
Odgovor na temu

BoLa
Software Developer
Sarajevo

Član broj: 7535
Poruke: 78
*.wifi-01.sa.lol.ba.



Profil

icon Re: struktura i pokazivaci pitanje16.11.2004. u 15:43 - pre 236 meseci
Rjeseno ... Skonto. feof sucks
 
Odgovor na temu

[es] :: C/C++ programiranje :: struktura i pokazivaci pitanje

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

Postavi temu Odgovori

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