12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

220 POGLAVLJE 13. DATOTEKE}if((fpt=fopen(*++argv,"r"))==NULL){printf("cat: ne mogu otvoriti datoteku %s\n",*argv);exit(1);}else {cpy(fpt,stdout);fclose(fpt);}return 0;Uočimo da smo u programu posve izbjegli upotrebu brojača time što inkrementiramoi dekrementiramo argc i argv.13.3.2 Čitanje i pisanje liniju po linijuFunkcija koja učitava podatke iz datoteke liniju-po-liniju jechar *fgets(char *buf, int n, FILE *fp);Prvi argument je pokazivač na dio memorije (eng. buffer) u koji će ulaznalinija biti spremljena, a drugi je veličina memorije na koju prvi argumentpokazuje. Treći argument je pokazivač na datoteku iz koje se učitava.Funkcija će pročitati liniju uključujući i znak za prijelaz u novi red i nakraj će dodati nul znak ’\0’. Pri tome će biti učitano najviše n-1 znakova,uključivši ’\n’. Ukoliko je ulazna linija dulja od toga, ostatak će biti pročitanpri sljedećem pozivu funkcije fgets.Funkcija vraća buf ako je sve u redu ili NULL ako se došlo do kraja datotekeili se pojavila greška.Funkcijachar *gets(char *buf);uvedena u Poglavlju 5 čita uvjek sa standardnog ulaza. Ona ne uzima veličinubuffera kao argument i stoga se može desiti da je ulazna linija veća od memorijekoja je za nju rezervirana. Stoga je bolje umjesto gets(buf) koristitifgetf(buf,n,stdin). Pri tome treba uzeti u obzir razliku da fgets učitavai znak ’\n’, dok gets znak za prijelaz u novi red učitava, ali na njegovomjesto stavlja ’\0’.Funkcija za ispis podataka u datoteku, liniju-po-liniju je

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!