|
[ Gorex @ 26.05.2013. 20:56 ] @
|
Ja bih molio ljude koji znaju da mi objasne sto pokazivac, kad uzme "adresu" od fopen("podaci.txt","w"); ne prikazuje na izlazu istu adresu, nego prikazuje adresu uvecanu za 96 bajta. Do sad nisam radio sa datotekama, radio sam sa strukturama i uvek kad sam radio sa pokazivacima, radio sam tako sto predam adresu neke promenljive, niza ili strukture pokazivacu itd.. Ali ovde ne znam sta se desava... I zbog cega se radi sa pokazivacima? Unapred hvala...
FILE *f=fopen("podaci.txt","w");
// printf("%d,%d" ,fopen("podaci.txt","r"),f ); |
[ Goran Rakić @ 26.05.2013. 21:02 ] @
Ako znaš da je FILE struktura definisana u zaglavlju stdio.h, i da fopen() unutar funkcije alocira takvu jednu strukturu, popuni njena polja i vrati pokazivač na nju, da li su stvari jasnije?
Citat:
Upon successful completion fopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error.
FILE is a structure containing information about a file.
[ X Files @ 26.05.2013. 21:20 ] @
Ako sam dobro shvatio pitanje:
Citat:
FILE *f=fopen("podaci.txt","w");
// printf("%d,%d" ,fopen("podaci.txt","r"),f );
... tebe zanima zašto ovo dvoje obojeno crvenom bojom NEMA ISTU vrednost prilikom ispisa, a očekivano je da jeste isto jer je "f=fopen()".
Zato što ta dva fopen()-a nisu ista stvar... Svako novo otvaranje fajl streama je NOVO otvaranje, nije ISTO otvaranje :)
Pokušaj ovo:
Code:
FILE *f=fopen("podaci.txt","w");
printf("%d,%d,%d" , fopen("podaci.txt","r"), fopen("podaci.txt","r"), f );
... trebalo bi da su sve tri vrednosti različite.
[ Gorex @ 26.05.2013. 22:05 ] @
Pa i nisu bas najjasnije :D Znam da je FILE struktura koja je defiisana u zaglavlju <stdio.h> , ali ne znam da li sam te dobro razumeo ovo posle sto si napisao. Jel sama funkcija fopen() alocira jednu takvu strukturu i kako to vrati pokazivac, ako moze malo detaljnije. Hvala...
Citat: Goran Rakić:
Ako znaš da je FILE struktura definisana u zaglavlju stdio.h, i da fopen() unutar funkcije alocira takvu jednu strukturu, popuni njena polja i vrati pokazivač na nju, da li su stvari jasnije?
Citat:
Upon successful completion fopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error.
FILE is a structure containing information about a file.
Dobro si shvatio pitanje :D
Citat: X Files: Ako sam dobro shvatio pitanje:
... tebe zanima zašto ovo dvoje obojeno crvenom bojom NEMA ISTU vrednost prilikom ispisa, a očekivano je da jeste isto jer je "f=fopen()".
Zato što ta dva fopen()-a nisu ista stvar... Svako novo otvaranje fajl streama je NOVO otvaranje, nije ISTO otvaranje :)
[ Burgos @ 26.05.2013. 22:55 ] @
Prvi put kada pozoveš fopen, dobiješ jednu strukturu. Kada drugi put pozoveš fopen dobiješ drugu strukturu, i tako za svaki fajl.
Ti ovde ne uzimaš adresu fopen funkcije:
Code: printf("%d,%d" ,fopen("podaci.txt","r"),f );
već ispisuješ vrednost onoga što ti fopen vrati.
Za svaki otvoreni fajl, alocira se nova struktura na nekom novom mestu i vrati se pokazivač na nju.
[ Gorex @ 27.05.2013. 18:03 ] @
Ja koliko sam procitao da ukoliko funkcija otvori datoteku, vrati ce adresu strukture pokazivacu, a ako je pokazivac NULL onda otvaranje nije uspelo ili nema te datoteke na disku...
Ako fopen alocira strukturu u memoriji onda bi trebalo da je struktura tipa FILE, posto je i pokazivac, pokazivac na strukturu tipa FILE, dal sam u pravu? :D
Citat: Burgos: Prvi put kada pozoveš fopen, dobiješ jednu strukturu. Kada drugi put pozoveš fopen dobiješ drugu strukturu, i tako za svaki fajl.
Ti ovde ne uzimaš adresu fopen funkcije:
Code: printf("%d,%d" ,fopen("podaci.txt","r"),f );
već ispisuješ vrednost onoga što ti fopen vrati.
Za svaki otvoreni fajl, alocira se nova struktura na nekom novom mestu i vrati se pokazivač na nju.
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|