Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Ukazatele a structy

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Ukazatele a structy

Autor: mol

18:42:40 21.10.2011

Jinak to co pise hlucheucho je samozrejme uplna blbost, cmp_ptr+i se posouva po sizeof(struct company) nikoli po bajtech. Jmenuje se to adresova aritmetika a je to asi tak třetí kapitola každé učebnice céčka.

Citovat příspěvek

 

Re: Ukazatele a structy

Autor: mol

18:31:14 21.10.2011

Nechapu, proc tak slozite. Proc neudelas proste

if (ptr->companies[i].name[0] == '\0') {

---------

cmp_ptr=ptr;
nechapu uz vubec k cemu je dobre, mozna
cmp_ptr = &(ptr->companies[i]);

Citovat příspěvek

 

Re: Ukazatele a structy

Autor: hlucheucho

16:07:05 21.10.2011

value=(int)(*(cmp_ptr+i));

Nepřečte i-tý prvek typu company, ale přečte i-tý byte od cmp_ptr.

na i-tý prvek typu company se dostaneš pomocí
*(cmp_ptr+i*sizeof(company))

*(cmp_ptr+i) je pointer, asi ho chceš přetypovat na pointer na int:
value=(int*)(*(cmp_ptr+i));

hu

Citovat příspěvek

 

Re: Ukazatele a structy

Autor: Pavel89

15:31:47 21.10.2011

>typ pole [velikost];

>i-tý prvek pak pomocí pointeru

>*(pole + i * sizeof(typ))

ano, to vim

>jinak mi není jasný, co chceš do value načíst.

>hu

Je tam struktura struct company_registy a v ni je pole structu company. Chci natvrdo vzit prvni bity i-te company v company_registry a prevest je na int a porovnat s nulou.

Citovat příspěvek

 

Re: Ukazatele a structy

Autor: hlucheucho

15:22:06 21.10.2011

typ pole [velikost];

i-tý prvek pak pomocí pointeru

*(pole + i * sizeof(typ))

jinak mi není jasný, co chceš do value načíst.

hu

Citovat příspěvek

 

Ukazatele a structy

Autor: Pavel89

15:08:25 21.10.2011

Zdravim,

zrovna pisu rt-program a narazil jsem na dost otravnout chybu, ktere se nemuzu zbavit. Mam nasledujici datove struktury:

[CODE]
extern struct company_registry *ptr;
extern struct company *cmp_ptr;

struct company {
char name[20];
int work;
};

struct company_registry {
struct company companies[50];
};[/CODE]

Nez se spusti jednotlive procesy, ktere pres sdilenou pamet s timto registrem firem pracuji, tak udelam
[CODE]
memset(ptr, 0, sizeof(struct company_registry));
[/CODE]
abych vycistil pamet a pak v programu poznal, zda je jiz misto ve sdilene pameti zabrane nebo ne.

Problem je zde:
[CODE]
...
...
int main(int argc, char *argv[]) {
int id, count, i, lowerIndex = 0, upperIndex = 0,found;
int value;
char input;
char diggerNumber[10];
int lowerIdPool[50];
int upperIdPool[50];

if (argc<=1) {
printf("No arguments. Terminating...\n");
exit(1);
}

semTake(lock, WAIT_FOREVER);
found = 0;
for (i = 0; i < 50; i++) {
cmp_ptr=ptr;
[bold]value=(int)(*(cmp_ptr+i)); /*ZDE JE PROBLEM*/[/bold]
if (value == 0) {
strcpy(((*ptr).companies[i].name),argv[1]); /*registruje se do pameti*/
found = 1;
id = i;
break;
}
....
...
[/CODE]
Prekladac hlasi invalid type conversion. Mne se to zda v poradku. Chci se podivat na i-ty struct company ve velkem structu company_registry. Pak si to pretypuju na int a podivam se jestli je to 0. Kdyby se s tou pameti cokoliv delo, tak to nula nebude.

(hlavi mi taky warning na cmp_ptr=ptr ale to se mi zda v poradku)

Budu vdecny za jakekoliv rady.

Dik

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: