0% found this document useful (0 votes)
48 views30 pages

C Stand Bibl

The document discusses the C standard library, which is defined by the ANSI C standard. It contains useful functions, predefined constants, typedefs, and global variables declared in header files that are included in almost every C program. The header files are functionally divided, with files like stdio.h for input/output functions, string.h for string functions, and math.h for mathematical functions. Common functions defined include fopen() for opening files, printf() for formatted output, and scanf() for formatted input.

Uploaded by

vexxxon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views30 pages

C Stand Bibl

The document discusses the C standard library, which is defined by the ANSI C standard. It contains useful functions, predefined constants, typedefs, and global variables declared in header files that are included in almost every C program. The header files are functionally divided, with files like stdio.h for input/output functions, string.h for string functions, and math.h for mathematical functions. Common functions defined include fopen() for opening files, printf() for formatted output, and scanf() for formatted input.

Uploaded by

vexxxon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Dodatak C - standardna biblioteka C jezika 1

Dodatak C. Standardna biblioteka C jezika



Standardna biblioteka C jezika definirana je standardom: American national standard for information
systems - Programming language C, ANSI X3.159-1989, American National Standards Institute.
1989. Sadri niz korisnih funkcija, predefiniranih konstanti (makro naredbi), typedef tipova i globalnih
varijabli (pr. stdin, stdout). Deklaracija tih objekata zapisana je u datotekama koje se nazivaju
zaglavlja ili h-datoteke (eng. headers), a koriste se kao poetne #include datoteke u gotovo svakom
izvornom programu.



Funkcionalna podjela h-datoteke (zaglavlja)
temeljne definicije <stddef.h>
rad s ulazno izlaznim ureajima i datotekama <stdio.h>
radnje s znakovima i stringovima <string.h>, <ctype.h>, <stdlib.h>, <stdio.h>
alociranje memorije <stdlib.h>
matematike funkcije <math.h>
datum i vrijeme <time.h>
promjenljivi broj argumenata <stdarg.h>
globalni skokovi <setjmp.h>
asertacija <assert.h>
prihvat signala stanja raunalnog procesa <signal.h>
prihvat i dojava pogreke <errno.h>, <stdio.h>, <string.h>
minimalne i maksimalne vrijednosti tipova <limits.h>, <float.h>
lokalizacija znakovnih zapisa <locale.h>, <stdlib.h>, <wchar.h>, <wctype.h>
suelje s operativnim sustavom <stdlib.h>


Slijedi opis funkcija definiranih standardom. Za svaku funkciju navodi se deklaracija, opis
argumenata funkcije i tip vrijednosti koju funkcija vraa.



C 1 <stdio.h>
U zaglavlju <stdio.h>, definiran je niz funkcija za rad s ulazno/izlaznim tokovima. Svakom toku je
pridjeljen pokaziva na strukturu FILE koja je takoer definirana u <stdio.h>. Standardni ulaz,
standardni izlaz i standardni tok dojave greke se automatski inicijaliziraju pri startanju programa, a
njihov pokaziva na strukturu FILE je u globalnim varijablama:

FILE *stdin; /* pokaziva toka standardnog ulaza */
FILE *stdout; /* pokaziva toka standardnog izlaza */
FILE *stderr; /* pokaziva toka dojave greke */
Iniciranje pokazivaa datotenih tokova vri se pomou funkcije fopen(). Kada se zavri rad s
datotekom treba zatvoriti njen tok pomou funkcije fclose().

U zaglavlju <stdio.h> definirana je i simbolika konstanta EOF koja slui kao oznaka kraja
datoteke.



Dodatak C - standardna biblioteka C jezika 2
Otvaranje i zatvaranje toka

fopen

FILE *fopen(const char *name, const char *mode);
fopen otvara tok za datoteku imena name. Ako je operacija uspjena, funkcija vraa pokaziva toka, a
ako je neuspjena tada vraa NULL. String mode oznaava nain na koji e biti otvorena datoteka.
Prvi znak tog stringa mora biti r, w, ili a, to oznaava da se datoteka otvara za itanje, pisanje ili
dopunjavanje. Ako se nakon prvog znaka napie znak + tada se datoteka otvara za itanje i pisanje.
Dodatno sa moe napisati i znak b. To je oznaka da se na MS-DOS sustavima datoteka tretira kao
binarna datoteka. U suprotnom datoteka se otvara u tekstualnom modu. Tada se kod MS-DOS
/Windows sustava znak za kraj retka \n u tekstualnoj datoteci zapisuje s dva znaka \r\n, takoer se
znak Ctrl-Z (ASCII vrijednost 26) tretira kao oznaka kraja datoteke. Ove pretvorbe ne postoje na Unix
sustavima.

freopen

FILE *freopen(const char *name, const char *mode, FILE *fp);
freopen slui kao i fopen, ali na nain da se datoteka imena name povee s postojeim pokazivaem
toka fp. Tipino se koristi za redirekciju sa standardnih tokova, primjerice, naredbom

freopen("output.log", "w", stdout);
budui izlaz koji generiraju funkcije koje djeluju na stdin (primjerice putchar i printf ) bit e
preusmjeren u datoteku output.log.

fclose

int fclose(FILE *fp);
Funkcija fclose() zatvara tok fp. U sluaju greke vraa EOF, inae vraa 0. Funkcija fclose()
se automatski primjenjuje na sve otvorene tokove pri normalnom zavretku programa.

fflush

int fflush(FILE *fp);
Ako je otvoren tok fp, funkcijom fflush() svi se podaci iz privremenog datotenog spremnika zapiu u
datoteku. Funkcija vraa 0, ili EOF ako nastupi greka.

Input and Output Operations

getchar, getc, fgetc

int getchar();
int getc(FILE *fp);
int fgetc(FILE *fp);
Funkcija getc() vraa sljedei dobavljivi znak iz toka fp, ili EOF ako je kraj datoteke. Obino EOF
ima vrijednost -1, kako bi se razlikovao od ostalih znakova. Zbog toga ova funkcija vraa tip int, a ne
tip char. Funkcija getchar() je ekvivalentna getc(stdin). Funkcija fgetc()je ekvivalentna getc(), ali
moe biti implementirana kao makro naredba.


putchar, putc, fputc
Dodatak C - standardna biblioteka C jezika 3

int putchar(int c);
int putc(int c, FILE *fp);
int fputc(int c, FILE *fp);
Funkcija putc() upisuje znak c u tok fp. Funkcija putchar(c) je ekvivalentna putc(c, stdout). Funkcija
fputc je ekvivalentna putc(),ali moe biti implementirana kao makro naredba.
Sve tri funkcije vraaju upisani znak, ili EOF u sluaju greke.

printf, fprintf

int printf(const char *format, ...);
int fprintf(FILE *fp, const char *format, ...);
Funkcija fprintf() upisuje tekstualno formatirane argumente u tok fp. Tri tokice oznaavaju listu
argumanata. Format se odreuje u stringu format, koji sadri znakove koji se direktno upisuju na
izlazni tok i specifikatore formatiranog ispisa argumenata.
printf(format, ) je ekvivalentno fprintf(stdout, format, ).
Specifikator formata se sastoji od znaka %, iza kojeg slijede oznake za irinu i preciznost ispisa
te tip argumenta, u sljedeem obliku:

%[prefiks][irina_ispisa][. preciznost][veliina_tipa]tip_argumenta

Specifikator formata mora zapoeti znakom % i zavriti s oznakom tipa argumenta. Sva ostala polja su
opciona (zbog toga su napisana unutar uglatih zagrada).
U polje irina_ispisa zadaje se minimalni broj kolona predvienih za ispis vrijednosti. Ako ispis sadri
manji broj znakova od zadane irine ispisa, na prazna mjesta se ispisuje razmak. Ako ispis sadri vei
broj znakova od zadane irine, ispis se proiruje. Ako se u ovo polje upie znak * to znai da e se
broj kolona indirektno oitati iz slijedeeg argumenta funkcije, koji mora biti tipa int.
Polje prefiks moe sadravati jedan znak koji ima sljedee znaenje:

- Ispis se poravnava prema lijevoj granici ispisa odreenog poljem irina_ispisa. (inae se
poravnava s desne strane) U prazna mjesta se upisuje razmak
+ Pozitivnim se vrijednostima ispisuje i + predznak.
razmak Ako je vrijednost positivna, dodaje se razmak prije ispisa (tako se moe poravnati kolone s
pozitivnim i negativnim brojevima).
0 Mjesta razmaka ispunjuju se znakom 0.
# Alternativni stil formatiranja

Polje . preciznost odreuje broj decimalnih znamenki iza decimalne toke kod ispisa realnog broja ili
minimalni broj znamenki ispisa cijelog broja ili maksimalni broj znakova koji se ispisuje iz nekog
stringa. Ovo polje mora zapoeti znakom toke, a iza nje se navodi broj ili znak *, koji znai da e se
preciznost oitati iz slijedeeg argumenta tipa int. Ukoliko se ovo polje ne koristi, tada se
podrazumijeva da e realni brojevi biti ispisani s maksimalno est decimalnih znamenki iza decimalne
toke.

Polje tip_argumenta moe sadravati samo jedan od sljedeih znakova znakova:

c Argument se tretira kao int koji se ispisuje kao znak iz ASCII skupa.
d, i Argument se tretira kao int, a ispisuje se decimalnim znamenkama.
e, E Argument je float ili double, a ispis je u eksponentnom formatu.
f Argument je float ili double, a ispis je prostom decimalnom formatu. Ako je prefiks # i
preciznost .0, tada se ne ispisuje decimalna toka.
g, G Argument je float ili double, a ispis je prostom decimalnom formatu ili u
eksponencijalnom formatu, ovisno o tome koji daje precizniji ispis u istoj irini ispisa.
o Argument je unsigned int, a ispisuje se oktalnim znamenkama.
p Argument se tretira kao pokaziva tipa void *, pa se na ovaj nain moe ispisati adresa bilo
Dodatak C - standardna biblioteka C jezika 4
koje varijable. Adresa se obino ispisuje kao heksadecimalni broj.
s Argument mora biti literalni string odnosno pokaziva tipa char *.
u Argument je unsigned int, a ispisuje se decimalnim znamenkama.
x, X Argument je unsigned int, a ispisuje se heksadecimalnim znamenkama. Ako se zada
prefiks # , ispred heksadecimalnih znamenki se ispisuje 0x ili 0X.
% Ne odnosi se na argument, ve znai ispis znaka %
n Nita se ne ispisuje, a odgovarajui argument mora biti pokaziva na int, u kojega se upisuje
broj do tada ispisanih znakova

Polje veliina_tipa moe sadravati samo jedan znak koji se upisuje neposredno ispred oznake tipa.

h Pripadni argument tipa int tretira se kao short int ili unsigned short int.
l Pripadni argument je long int ili unsigned long int.
L Pripadni argument realnog tipa je long double.

Funkcije printf() and fprintf() vraaju broj ispisanih znakova. Ako nastupi greka, vraaju negativan
broj.

scanf, fscanf

int scanf(const char *format, ...);
int fscanf(FILE *fp, const char *format, ...);

Funkcijom fscanf() dobavljaju se vrijednosti iz tekstualnog toka fp po pravilima pretvorbe koji su
odreeni u stringu format. Te vrijednosti se zapisuju na memorijske lokacije odreene listom
pokazivakih argumenata. Lista argumenata (...) je niz izraza odvojenih zarezom, ija vrijednost
predstavlja adresu postojeeg memorijskog objekta. Tip objekta mora odgovarati specifikaciji tipa prethodno
zapisanog u stringu format.

scanf(format, ) je ekvivalentno fscanf(stdin, format, ).

String format se formira od proizvoljnjih znakova i specifikatora formata oblika:

%[prefiks][irina_ispisa][veliina_tipa]tip_argumenta

Ako se pored specifikatora formata navedu i proizvoljni znakovi tada se oekuje da oni budu prisutni u
ulaznom tekstu (osim tzv. bijelih znakova: razmak, tab i nova linija) . Osim u sluaju specifikatora
%c, %n, %[, i %% , za sve pretvorbe sa podrazumijeva da se iz ulaznog teksta odstrane bijeli znakovi.

Jedini opcioni prefiks je znak * koji znai da se pretvorena vrijednost ne dodjeljuje ni jednom
argumentu.

U polju irina_ispisa zadaje se maksimalni broj kolona predvienih za dobavu vrijednosti.

Polje veliina_tipa moe sadravati samo jedan znak koji se upisuje neposredno ispred oznake tipa
pokazivakog argumenta. To su sljedei znakovi:

h Pripadni argument tipa int tretira se kao short int ili unsigned short int.
l Pripadni argument je long int ili unsigned long int.
L Pripadni argument realnog tipa je long double.

Polje tip_argumenta moe sadravati samo jedan od sljedeih znakova:

c Dobavlja se jedan znak, a argument je tipa char *. Ako je definirano polje irina_unosa, tada se
unosi onoliko znakova kolika je vrijednost irina_unosa.
d Dobavlja se cijeli broj, a argument je tipa int * ( ili short int * ili long int *, ako je
Dodatak C - standardna biblioteka C jezika 5
zadana veliina tipa h ili l).
i Dobavlja se cijeli broj, a argument je tipa int * ( ili short int * ili long int *, ako je
zadana veliina tipa h ili l). Pretvorba se vri i ako je broj zapisan oktalno (zapoima
znamenkom 0) ili heksadecimalno (zapoima s 0x ili 0X),
e, E, f,
g, G
Dobavlja se realni broj. Argument je tipa float * ili double *.
o Dobavlja se cijeli broj zapisan oktalnim znamenkama. Argument je tipa unsigned int* (ili
unsigned short int * ili unsigned long int *, ako je zadana veliina tipa h ili
l).
p Dobavlja se pokaziva, a argument mora biti tipa void **.
s Dobavlja se string koji ne sadri bijele znakove. Argument mora biti tipa char *.
u Dobavlja se cijeli broj, a argument je tipa unsigned int * ( ili unsigned short int
* ili unsigned long int *, ako je zadana veliina tipa h ili l).
x, X Dobavlja se cijeli broj zapisan heksadecimalno. Argument je tipa unsigned int*
Argument je tipa unsigned int* (ili unsigned short int * ili unsigned long
int *, ako je zadana veliina tipa h ili l).
% Ne odnosi se na argument, ve znai dobavu znaka %
n Ne vri se pretvorba. Odgovarajui argument mora biti tipa int *. Upisuje se broj do tada
uitanih znakova
[ Za format oblika %[...] dobavlja se string koji sadri znakove koji su unutar zagrada, prema
sljedeem obrascu:
%[abc] znai da se dobavlja string koji moe sadravati znakove a,b ili c.
%[a-d] znai da se dobavlja string koji moe sadravati znakove a,b,c ili d.
%[^abc] znai da se dobavlja string koji moe sadravati sve znakove osim a,b ili c.
%[^a-d] znai da se dobavlja string koji moe sadravati znakove sve znakove osim a,b,c ili d.
Argument je tipa char *.


Funkcije scanf() and fscanf() vraaju broj uspjeno izvrenih pretvorbi (bez %n i %*). Ako se ne
izvri ni jedna konverzija, zbog dosegnutog kraja datoteke, vraa se vrijednost EOF.

gets, fgets

char *fgets(char *buf, int n, FILE *fp);
char *gets(char *buf);
Funkcije fgets() ita liniju teksta (koja zavrava znakom \n) iz toka fp, i sprema taj tekst
(ukljuujui \n i zakljuni znak \0) u znakovni niz buf. Veliina tog niza je n znakova. Ako u liniji
ima vie od n-2 znakova, tada nee biti dobavljeni svi znakovi.

Funkcije gets() je ekvivalentna funkciji fgets(), ali iskljuivo slui za dobavu stringa s tipkovnice.
Ona ne prenosi znak nove linije i ne vri kontrolu broja unesenih znakova.

Obje funkcije vraaju pokaziva na dobavljeni string ili NULL ako je greka ili kraj datoteke.

puts, fputs

int puts(char *str);
int fputs(char *str, FILE *fp);
Funkcija fputs() ispisuje string str u tok fp. Funkcija puts()ispisuje string str na stdout i dodaje znak
nove linije. Obje funkcije vraaju pozitivnu vrijednost ili EOF ako nastane greka.

fread

size_t fread(void *buf, size_t elsize, size_t n, FILE *fp);
Dodatak C - standardna biblioteka C jezika 6
Funkcija fread()iz toka fp ita blok veliine n x elsize bajta i upisuje u spremnik buf. Za dobavu
n elemenata nekog tipa, elsize treba biti jednak sizeof(tip elementa). Kod itanja znakova je
elsize = 1. Funkcija vraa broj dobavljenih elemenata ili EOF u sluaju greke.

fwrite

size_t fwrite(void *buf, size_t elsize, size_t n, FILE *fp);
Funkcija fwrite() upisuje u tok fp blok veliine n x elsize bajta iz spremnika buf. Za upis n
elemenata nekog tipa, elsize treba biti jednak sizeof(tip elementa). Kod upisa n znakova
elsize = 1. Funkcija vraa broj upisanih elemenata ili EOF u sluaju greke.

ungetc

int ungetc(int c, FILE *fp);
Funkcija ungetc()umee u tok fp znak c, tako da e pri sljedeem itanju taj znak biti prvi oitan. Ova
operacija se moe obaviti samo nakon operacije itanja iz toka. Funkcija vraa znak c ili EOF u
sluaju greke.

Pozicioniranje toka

Mjesto na kojem se vri itanje/pisanje u tok naziva se trenutna pozicija toka (eng. stream position). U
radu s binarnim datotekama moe se kontrolirati i postavljati trenutnu poziciju toka.

ftell

long int ftell(FILE *fp);
Funkcija ftell vraa long int vrijednost koja je jednaka trenutnoj poziciji toka fp. (kod binarnih
datoteka to je pomak u bajtima od poetka datoteke). Ako se radi s velikom datotekama, u kojima
pozicija moe biti vee od long int, tada treba koristiti funkciju fgetpos().


fseek, rewind

int fseek(FILE *fp, long int pos, int from);
void rewind(FILE *fp);
Funkcija fseek() postavlja trenutnu poziciju toka fp na poziciju pos, relativno prema vrijednosti from
argumenta, koji moe imati tri vrijednosti: SEEK_SET (poetak datoteke) , SEEK_CUR (trenutna
pozicija) i SEEK_END (kraj datoteke). Argument pos moe biti negativna vrijednost. Funkcija vraa
0, ako je operacija uspjena.

Ako je argument from jednak SEEK_SET,
nova_pozicija = pos;

Ako je argument from jednak SEEK_CUR,
nova_pozicija = trenutna_pozicija + pos;

Ako je argument from jednak SEEK_END
nova_pozicija = pozicija_kraja_datoteke + pos;

Nova pozicija mora biti vea ili jednaka nuli, i moe biti vea od trenutne pozicije.

Dodatak C - standardna biblioteka C jezika 7
Funkcija rewind(fp) postavlja poziciju na 0, to je ekvivalentno fseek(fp, 0, SEEK_SET). Ovu
funkciju se moe koristiti i s tekstualnim datotekama.


fgetpos, fsetpos

int fgetpos(FILE *fp, fpos_t *pos);
int fsetpos(FILE *fp, const fpos_t *pos);
Funkcija fgetpos()zapisuje trenutnu poziciju toka fp u fpos_t objekt na kojega pokazuje pos. Funkcija
fsetpos postavlja trenutnu poziciju toka fp na vrijednost fpos_t objekta na kojeg pokazuje pos (to
mora biti vrijednost prethodno dobijena funkcijom fgetpos). Obje funkcije vraaju 0 ako je operacija
uspjena.

Kontrola ulazno/izlaznog spremnika

setbuf, setvbuf

void setbuf(FILE *fp, char *buf);
void setvbuf(FILE *fp, char *buf, int mode, size_t size);
Pomou ovih funkcija postavlja se korisniki definirani spremnik buf kao spremnik ulazno/izlaznih
operacija. Primjenjuju se prije poziva ulazno/izlaznih operacija na otvoreni tok fp.
Kod funkcije setbuf() veliina spremnika mora biti jednaka BUFSIZE (definiran u stdio.h). Ako
je buf==NULL tada se ne koristi spremnik.
Kod funkcije setvbuf() veliina spremnika se postavlja argumentom size, a nain koritenja
spremnika se postavlja argumentom mode, koji moe imati tri predefinirane vrijednosti:

_IONBF
Ne koristi se spremnik, ve se vri neposredan pristup datoteci.
_IOFBF
Spremnik se koristi potpuno, tj. spremnik se prazni tek kada je popunjen.
_IOLBF
Spremnik se koristi djelomino (uvijek se prazni kada se ispisuje znak nove linije \n ).

Dojava i prihvat greke

feof

int feof(FILE *fp);
Funkcija feof() vraa nenultu vrijednost ako je tok u poziciji kraj_datoteke, inae vraa 0.

ferror

int ferror(FILE *fp);
Funkcija ferror() vraa nenultu vrijednost ako je nastala greka u radu s tokom, inae vraa 0.

clearerr

void clearerr(FILE *fp);
Funkcija clearerr() brie indikatore greke ili kraj_datoteke za tok fp.

perror

Dodatak C - standardna biblioteka C jezika 8
void perror(const char *prefix);

Funkcija perror() ispisuje poruku na stderr o trenutno nastaloj greki. Tip greke se biljei u globalnoj
varijabli errno. Poruka je ista kao i poruka koja se dobije pozivom funkcije strerror(errno). Drugim
rijeima, perror(p) je otprilike ekvivalentna pozivu

fprintf(stderr, "%s: %s", p == NULL ? "" : p, strerror(errno));
Argument prefix je proizvoljni string koji se ispisuje ispred poruke.

Operacije s formatiranim stringovima

sprintf, sscanf

int sprintf(char *buf, const char *format, ...);
int sscanf(const char *buf, const char *format, ...);
Funkcije sprintf() i sscanf() su varijante od printf() i scanf() koje umjesto ulazno/izlaznog toka koriste
proizvoljno odabrani string buf. Znak kraja stringa \0 se tretira kao znak kraj_datoteke. Korisnik
mora voditi rauna o tome da veliina stringa buf bude dovoljno velika, da se moe izvriti sve
pretvorbe formata u sprintf() funkciji.

Operacije s promjenjljivom listom argumenata

vprintf, vfprintf, vsprintf

int vprintf(const char *format, va_list argp)
int vfprintf(FILE *fp, const char *format, va_list argp)
int vsprintf(char *buf, const char *format, va_list argp)
Ove funkcije omoguuju definiranje funkcija s promjenljivim brojem argumenata, koje imaju
funkcionalnost kao printf(), fprintf(), i sprintf() funkcije.
Posljednji argument ovih funkcija argp je pokaziva tipa va_list. To omoguuje rad s
promjenljivim brojem argumenata. U sljedeem programu definirana je funkcija za dojavu greke,
koju se moe koristiti za dojavu greke pri analizi izvornog programa. Ona koristi dvije globalne
varijable koje sadre ime datoteke (filename) i broj linije izvornog programa (lineno). U dojavi
greke se uvijek prije izvjetaja o tipu greke ispisuje to ime i broj linije.

#include <stdio.h>
#include <stdarg.h>
extern char *filename; /* current input file name */
extern int lineno; /* current input line number */

void error(char *msg,...)
{
va_list argp;
va_start(argp, msg);
fprintf(stderr, "%s:, line %d: ",filename, lineno);
vfprintf(stderr, msg, argp);
fprintf(stderr, "\n");
va_end(argp);
}

Dodatak C - standardna biblioteka C jezika 9
Manipuliranje s datotekama

rename

int rename(const char *origname, const char *newname);
Funkcija rename() vri promjenu imena datoteke origname, u ime newname. Ako je operacija
uspjena funkcija vraa 0, inae vraa nenultu vrijednost.

remove

int remove(const char *name);
Funkcija remove() brie datoteku imena name. Ako je operacija uspjena funkcija vraa 0, inae vraa
nenultu vrijednost.


tmpfile, tmpnam

FILE *tmpfile(void);
char *tmpnam(char *buf);
Funkcija tmpfile() stvara privremenu datoteku i otvara je u "wb+" modu. Po izlasku iz programa ova
se datoteka automatski brie.
Funkcija tmpnam() generira jedinstveno ime u string buf, koji mora biti duljine L_tmpnam
(predefinirana konstanta). To se ime moe koristiti za stvaranje datoteke. Ako je buf==0, ime se
generira u internom statikom spremniku. Funkcija vraa pokaziva na taj spremnik.

C 2 <string.h>
Funkcije koje su deklarirane u <string.h> uglavnom slue za rad s ASCIIZ stringovima. Pored njih,
definirano je nekoliko funkcija, ije ime zapoima s mem, za rad s memorijskim blokovima
(nizovima).
Rad sa stringovima

size_t strlen(const char *s)
Vraa duljinu stringa s.
char *strcpy(char *s, const char *t)
Kopira string t u string s, ukljuujui '\0'; vraa s.
char *strncpy(char *s, const char *t, size_t n)
Kopira najvie n znakova stringa t u s; vraa s. Dopunja string s sa '\0'
znakovima ako t ima manje od n znakova. Napomena: ako u stringu t ima n ili vie
znakova, tada string s nee biti zakljuen s '\0'.
char *strcat(char *s, const char *t)
Dodaje string t na kraj stringa s; vraa s.
char *strncat(char *s, const char *t, size_t n)
Dodaje najvie n znakova stringa t na string s, i znak '\0'; vraa s.
int strcmp(const char *s, const char *t)
Usporeuje string s sa stringom t, vraa <0 ako je s<t, 0 ako je s==t, ili >0 ako je
s>t. Usporedba je leksikografska, prema ASCII rasporedu.
Dodatak C - standardna biblioteka C jezika 10
int strncmp(const char *s, const char *t, size_t n)
Usporeuje najvie n znakova stringa s sa stringom t; vraa <0 ako je s<t, 0 ako je
s==t, ili >0 ako je s>t.
int strcoll(const char *s, const char *t);
strcoll() usporeuje dva stringa s1 and s2, poput strcmp(), ali se usporedba vri prema
multinacionalnom znakovnom rasporedu (koji je odreen konstantom LC_COLLATE
). Vraa <0 ako je s<t, 0 ako je s==t, ili >0 ako je s>t.
size_t strxfrm(char *s, const char *t, size_t n);
strxfrm() formira modificiranu kopiju n znakova stringa t u stringu s (ukljuujui
\0) , tako da strcmp(s,t) daje istu ocjenu kao i strcoll(s,n) na originalnom
stringu. Vraa broj znakova u stringu s.
char *strchr(const char *s, int c)
Vraa pokaziva na prvu pojavnost znaka c u stringu s, ili NULL znak ako c nije
sadran u stringu s.
char *strrchr(const char *s, int c)
Vraa pokaziva na zadnju pojavnost znaka c u stringu s, ili NULL znak ako c nije
sadran u stringu s.
char *strstr(const char *s, const char *t)
Vraa pokaziva na prvu pojavu stringa t u stringu s, ili NULL ako string s ne sadri
string t.
size_t strspn(const char *s, const char *t)
Vraa duljinu prefiksa stringa s koji sadri znakove koji ine string t.
size_t strcspn(const char *s, const char *t)
Vraa duljinu prefiksa stringa s koji sadri znakove koji nisu prisutni u stringu t.
char *strpbrk(const char *s, const char *t)
Vraa pokaziva na prvu pojavu bilo kojeg znaka iz string t u stringu s, ili NULL ako
nije prisutan ni jedan znak iz string t u stringu s.
char *strerror(int n)
Vraa pokaziva na string koji se interno generira, a slui za dojavu greke u nekim
sistemskim operacijama. Argument je obino globalna varijabla errno, iju
vrijednost odreuje izvrenje funkcija iz standardne biblioteke.
char *strtok(char *s, const char *sep)
strtok() je funkcija kojom se moe izvriti razlaganje stringa na niz leksema koji
su razdvojeni znakovima-separatorima. Skup znakova-separatora se zadaje u stringu
sep. Funkcija vraa pokaziva na leksem ili NULL ako nema leksema.

Koritenje funkcije strtok() je specifino jer u stringu moe biti vie leksema, a ona vraa
pokaziva na jedan leksem. Da bi se dobili slijedei leksemi treba iznova pozvati ovu funkciju, ali s
prvim argumentom jednakim NULL. Primjerice, za string

char * s = "Prvi drugi,treci";
ako odaberemo znakove separatore: razmak, tab i zarez, tada sljedei iskazi daju ispis tri leksema (Prvi
drugi i treci):

char *leksem = strtoken(s, " ,\t"); /* dobavi prvi leksem */
Dodatak C - standardna biblioteka C jezika 11
while( leksem != NULL) { /* ukoliko postoji */
printf("", leksem); /* ispii ga i */
lexem = strtok(NULL," ,\t"); /* dobavi sljedei leksem */
} /* pa ponovi postupak */

Operacije s memorijskim blokovima (nizovima)

memcpy, memmove

void *memcpy(void *dest, const void *src, size_t n);
void *memmove(void *dest, const void *src, size_t n);

Ove funkcije kopiraju tono n bajta s lokacije na koju pokazuje src na lokaciju koju pokazuje dest.
Ukoliko se blokovi preklapaju tada treba koristiti funkciju memmove(). Funkcije vraaju pokaziva
dest.

memcmp

int memcmp(const void *p1, const void *p2, size_t n);
Funkcija memcmp() usporeuje tono n znakova s lokacija na koje pokazuju p1 i p2, na isti nain kao
strcnmp(), ali se usporedba ne prekida ako je dostignut znak \0.

memchr

void *memchr(const void *p, int c, size_t n);
Funkcija memchr() trai prvu pojavu znaka c u n znakova bloka na koji pokazuje p. Vraa pokaziva
na pronaeni znak ili NULL ako znak nije pronaen.

memset

void *memset(void *p, int c, size_t n);
Funkcija memset() spostavlja n bajta bloka na koji pokazuje p na vrijednost znaka c, i vraa p.

C 3 <ctype.h>
Funkcije iz <ctype.h> omoguuju klasifikaciju znakova i pretvorbu velikih u mala slova i obratno.
Klasifikacija znakova

int isupper(int c);
vraa vrijednost razliitu od nule ako je znak c veliko slovo, inae vraa
0.
int islower(int c);
vraa vrijednost razliitu od nule ako je znak c malo slovo, inae vraa 0.
int isalpha(int c);
vraa vrijednost razliitu od nule ako je znak c veliko ili malo slovo, inae
vraa 0.
int iscntrl(int c);
vraa vrijednost razliitu od nule ako je znak c kontrolni znak, inae vraa 0.
Dodatak C - standardna biblioteka C jezika 12
int isalnum(int c);
vraa vrijednost razliitu od nule ako je znak c slovo ili znamenka, inae vraa
0.
int isdigit(int c);
vraa vrijednost razliitu od nule ako je znak c decimalna znamenka, inae vraa 0.
int isxdigit(int c);
vraa vrijednost razliitu od nule ako je znak c heksadecimalna znamanka, inae vraa
0.
int isgraph(int c);
vraa vrijednost razliitu od nule ako je znak c tiskani znak osim razmaka, inae vraa
0.
int isprint(int c);
vraa vrijednost razliitu od nule ako je znak c tiskani znak ukljuujui razmak, inae
vraa 0.
int ispunct(int c);
vraa vrijednost razliitu od nule ako je znak c tiskani znak osim razmaka, slova ili
znamanke, inae vraa 0.
int isspace(int c);
vraa vrijednost razliitu od nule ako je znak c razmak, tab, vert. tab, nova linija,
povrat ili nova stranica, inae vraa 0.
Pretvorba znaka

int toupper(int c);
int tolower(int c);

Funkcija toupper() pretvara malo slovo u ekvivalentno veliko slovo, ostala slova ostaju
nepromijenjena. Slino, tolower() pretvara veliko slovo u ekvivalentno malo slovo.
C 4 <stdlib.h>
U zaglavlju <stdlib.h> definirano je nekoliko temeljnih funkcija za alokaciju memorije, pretvorbu
stringa u brojeve, manipuliranje s multibajtnim znakovnim skupom, itd.
Alokacija memorije

malloc, calloc

void *malloc(size_t n);
void *calloc(size_t n, size_t elsize);
Funkcijom malloc alocira se n bajta slobodne memorije. Ako je alociranje uspjeno funkcija vraa
pokaziva na tu memoriju, u suprotnom vraa NULL pokaziva. Primjerice, naredbom

double *dp = malloc(10 * sizeof(double));
dobije se pokaziva dp, koji pokazuje na niz od 10 elemenata tipa double.

Funkcija calloc(n, elsize) je ekvivalentna malloc(n * elsize), uz dodatni uvjet da calloc inicijalizira sve
bitove alocirane memorije na vrijednost nula.
Dodatak C - standardna biblioteka C jezika 13

free

void free(void *p);
Funkcija free() prima kao argument pokaziva p. Uz pretpostavku da p pokazuje na memoriju koja je
prethodno alocirana fukcijom malloc, calloc ili realloc, ova funkcija dealocira tu memoriju.

realloc

void *realloc(void *oldptr, size_t newsize);
Funkcija realloc() vri promjenu veliine prethodno alocirane memorije, koja je pridjeljena
pokazivau ptr, na veliinu newsize. Funkcija realloc() vraa pokaziva na tu memoriju. Vrijednost
toga pokazivaa moe biti ista kao i vrijednost od ptr, ako memorijski alokator moe prilagoditi
veliinu zahtjevanog podruju slobodne memorije veliini newsize. Ukoliko se to ne moe ostvariti
funkcija realloc alocira novo podruje memorije pa u njega kopira i zatim oslobaa dio memorije
na koju pokazuje ptr. Ukoliko se ne moe izvriti alokacija memorije funkcija realloc() vraa
NULL.

Napomena: poziv realloc(p, 0) je ekvivalentan pozivu free(p), a poziv realloc(0, n) je ekivalentan
pozivu malloc(n).

Pretvorba stringa u numeriku vrijednost

atoi, atol, strtol, strtoul

int atoi(const char *s);
long int atol(const char *s);
long int strtol(const char *s, char **endp, int baza);
unsigned long int strtoul(const char *s, char **endp, int baza);
Ove funkcije pretvaraju numeriki string s u odgovarajuu numeriku vrijednost.
Funkcija strtol()u stringu s preskae bijele znakove, pretvara s u broj i vraa vrijednost tipa long int.
Ona omoguuje pretvorbu iz sustava razliite baze. Ako je baza 10 tada se iz ulaznog stringa s
prihvaaju znakovi od 0 do 10, a ako je baza 16 prihvaaju se i znakovi a-f, A-F. Ako je baza manja
od 10 prihvacaju se znakovi od 0 do baza-1. Ako je baza 0, tada se koristi pravilo da oktalni brojevi
zapoimaju s nulom, a heksadecimalni s 0x ili 0X.

atoi(s) je ekvivalntno strtol(s,NULL,0);

Argument endp ja pokaziva na pokaziva na char. Njega se koristi za tako da ako endp != NULL,
tada strtol() sprema u *endp pokaziva na prvi znak koji nije obraen. Ako je to znak '\0', pretvorba
je uspjena. Ako je jednak s, pretvorba uope nije izvrena. Funkcija vraa vrijednost koja je
pretvoreni broj ili 0 ako pretvorba nije izvrena ili konstanta LONG_MAX ili LONG_MIN ako se
broj ne moe predstasviti kao long int. U sluaju prekoraenja postavlja se errno = ERANGE.

Funkcija strtoul() je slina strtol() eosim to vraa tip unsigned long int, ili vrijednost ULONG_MAX
kod prekoraenja.

atol(s) je ekvivalntno strtoul(s,NULL,0);


atof, strtod

double atof(const char *s);
Dodatak C - standardna biblioteka C jezika 14
double strtod(const char *s, char **endp);
Ove funkcije pretvaraju numeriki string s u odgovarajuu numeriku vrijednost realnog broja.
Funkcija strtod()u stringu s preskae bijele znakove, pretvara s u broj i vraa vrijednost tipa double.
Prihvaa prosti i eksponentni zapis realnoh broja.
Argument endp ja pokaziva na pokaziva na char. Njega se koristi za tako da ako endp != NULL,
tada strtod() sprema u *endp pokaziva na prvi znak koji nije obraen. Ako je to znak '\0', pretvorba
je uspjena. U sluaju prekoraenja vraa konstantu HUGE_VAL,
i postavlja globalnu varijablul errno = ERANGE.

atof(s) je ekvivalentno strtod(s, NULL), osim to rezultat nije definiran u sluaju prekoraenja.

Generator sluajnih brojeva

rand

int rand(void);
Funkcija rand() vraa sluajni cijeli broj iz intervala 0 do RAND_MAX ( RAND_MAX je konstanta
definirana u <stdlib.h>).

srand

void srand(unsigned int seed);
Funkcija srand() postavlja poetnu vrijednost seed generatora sluajnih brojeva.

Sortiranje i traenje

qsort

void qsort(void *a, size_t n, size_t elsize, int (*cmpfunc)());
Funkcija qsort() sortira niz a, koji ima n elemenata veliine elsize (u bajtima), prema kriteriju koji
je odreen funkcijom na koju pokazuje cmpfunc. Ta funkcija mora biti deklarirana u obliku:

int name(const void *p1, const void *p2);
i mora vratiti cijeli broj koji je manji, vei ili jedanak nuli, ovosno o tome da li je objekt na kojeg
pokazuje p1 manji, vei, ili jednak objektu na kojeg pokazuje p2.

bsearch

bsearch(const void *pObj, const void *a, size_t n, size_t elsize,
int (*cmpfunc)());
Funkcija bsearch() vri binarno traenje u sortitanom nizu a, koji ima n elemenata veliine elsize (u
bajtima), traei element koji je jednak objektu na kojeg pokazuje pObj.
Pri traenju se za usporedbu koristi funkcija na kojiu pokazuje cmpfunc. Deklaracija te funkcije je ista
kao kod qsort().

Interakcija s operativnim sustavom

getenv
Dodatak C - standardna biblioteka C jezika 15

char *getenv(const char *name);
Environment sadri postavke operativnog sustava u sistemskim varijablama (pr. path). Funkcija
getenv() trai environment varijablu imena name i vraa njenu vrijednost u obliku stringa. Ako ne
moe pronai tu varijablu, tada vraa NULL.

atexit
int atexit(void (*func)(void));
Funkcija atexit() prima kao argument pokaziva na funkciju func, koja e biti pozvana pri normalnim
zavretku programa. Vraa 0 ako je funkcija uspjeno registrirana. Moe se registrirati do 32 funkcije,
koje e biti pozvane u obrnutom redoslijedu od reda registriranja.

exit
void exit(int status);
Funkcija exit() vri normalni zavretak programa, poziva sve funkcije koje su registrirane atexit()
funkcijom i zatvara sve tokove. Argument status se prosljeuje operativnom sustavu. Mogu se
koristiti i dvije simbolike konstante EXIT_SUCCESS i EXIT_FAILURE. Po dogovoru, status=0
(EXIT_SUCCESS) znai uspjean zavretak programa.

system

int system(const char *s);
Funkcija system() prima kao argument string koji sadri komandu operativnog sustava. Funkcija
vraa vrijednost koju vrati operativni sustav po zavretku procesa.

abort

void abort(void);
Funkcija abort() predstavlja zahtjev za neposrednim prekidom programa, na isti nain kao da je
izvren poziv raise(SIGABRT).

Cjelobrojne aritmetike funkcije

abs, labs

int abs(int x);
long int abs(long int x);
Obje funkcije vraaju apsolutnu vrijednost argumenta x..

div, ldiv

div_t div(int num, int denom);
ldiv_t div(long int num, long int denom);
Ove funkcije vre dijeljenje num/denum na nai da se istovremeno dobije rezultat dijeljenja i ostatak
cjelobrojnog dijeljenja. Rezultat se vraa u vrijednost koja je tipa sljedee strukture:

typedef struct
{
int quot; /* rezultat dijeljenja */
int rem; /* ostatak dijeljenja */
}div_t;
Dodatak C - standardna biblioteka C jezika 16

Multibajt znakovne sekvence i stringovi
Za zapis znakova po ASCII standardu koristi se tip char. Za zapis znakova se takoer moe koristiti
proireni znakovni tip wchar_t, koji podrava 16-bitni Unicode standard, i multibajt znakovne
sekvence MBCS (za jezike poput japanskog).

mblen

int mblen(const char *s, size_t n);
Funkcija mblen() vraa broj znakova u stringu koji sadri multibajt znakovne sekvence. Analizira se
maksimalno n znakova.

mbtowc, wctomb

int mbtowc(wchar_t dest, const char *src, size_t n);
int wctomb(char *dest, wchar_t src);
Ove funkcije pretvaraju multibajt znakovnu sekvencu u tip wchar_t i obrnuto.
Funkcija mbtowc() analizira maksimalno n bajta iz stringa src i pretvara ih u wchar_t i sprema u
dest, te vraa broj bajta ili -1 ako pretvorba nije uspjena.
Funkcija wctomb() pretvara proireni znak src u multibajt sekvencu dest, i vraa broj bajta u toj
sekvenci.. (Ovaj broj nee nikada biti vei od konstante MB_CUR_MAX, definirane u <stdlib.h>.)

mbstowcs, wcstombs

size_t mbstowcs(wchar_t *dest, const char *src, size_t n);
size_t wcstombs(char *dest, wchar_t src);
Ove funkcije vre pretvorbu viestruke multibajt sequence i niza proirenih znakova znakova.
Funkcija mbtowcs() pretvara multibajt sekvencu src i u niz proirenih znakova i sprema u dest, ali
maksimalno n znakova. Vraa broj pretvorenih znakova. Funkcija wcstombs() vri obrnutu radnju.

C 5 <math.h>
Standardne matematike funkcije su deklarirane u zaglavlju <math.h>. Njihov opis je dan sljedeoj
tablici:

Funkcija Vraa vrijednost:
double sin(double x); sin(x) , sinus kuta x u radijanima
double cos(double x); cos(x) , kosinus kuta x u radijanima
double tan(double x); tg(x) , tangens kuta x u radijanima
double asin(double x);
arcsin(x), vraa vrijednost [-/2, /2], za x [-1,1].
double acos(double x);
arccos(x), vraa vrijednost [0, ], za x [-1,1].
double atan(double x);
arctg(x), vraa vrijednost [-/2, /2].
double atan2(double y, double
x);
arctan(y / x), vraa vrijednost [-,].
double sinh(double x); sh(x), sinus hiperbolni kuta x
double cosh(double x); ch(x) , kosinus hiperbolni kuta x
double tanh(double x); th(x) , tangens hiperbolni kuta x
double exp(double x); e
x
, x potencija broja e = 2,781
Dodatak C - standardna biblioteka C jezika 17
double log(double x); prirodni logaritam ln(x), x>0.
double log10(double x); logaritam baze 10, log
10
(x), x>0.
double pow(double x,
double y);
x
y
, potenciranje x s eksponentom y. Nastaje greka ako je x=0
i y <= 0, ili ako je x<0, a y nije cijeli broj.
double sqrt(double x);
x, za x>=0, dugi korijen pozitivnog broja
double ceil(double x);
najmanji cijeli broj (tipa double) koji nije manji od x
double floor(double x);
najvei cijeli broj (tipa double) koji nije vei od x
double fabs(double x); |x|, apsolutna vrijednost od x
double ldexp(double x,int n); x*2
n

double frexp(double x,
int *exp);
rastavlja x na frakcioni dio i eksponent broja 2. Vraa
normaliziranu frakciju od x (iz intervala [1/2,1)] i exponent
od 2 u *exp. Ako je x jednak nuli, oba dijela su jednaka nuli.
Primjerice, frexp(2.5, &i) vraa 0.625 (odnosno 0.101 baze
2) i postavlja i na 2, tako da ldexp(0.625, 2) ponovo daje
vrijednost 2.5.
double modf(double x,
double *ip);
rastavlja x na integralni i frakcioni dio, tako da oba imaju
predznak od x. Vraa frakcioni dio, a integralni dio smjeta u
*ip.
double fmod(double x, double
y);
ostatak dijeljenja realnih brojeva x/y, s predznakom od x.

C 6 <time.h>
U zaglavlju <time.h> definirane su funkcije i strukture za rad s datumima i vremenom. Posebni
typedef tip time_t, slui za biljeenje vremena. Obino se uzima da ovaj tip predstavlja broj sekundi
poevi od 01.01.1970. godine. Za detaljniji zapis vremena i datuma koristi se struktura tm, koja se
definira na sljedei nain:

struct tm /* opisuje vrijeme i datum */
{ int tm_sec; /* sekunde 0..61 */
int tm_min; /* minute 0..59 */
int tm_hour; /* sat 0..23 */
int tm_mday; /* dan 1..31 */
int tm_mon; /* mjesec 0..11 */
int tm_year; /* broj godina nakon 1900 */
int tm_wday; /* dan u sedmici 0..6 */
int tm_yday; /* dan u godini 0..365 */
int tm_isdst; /* da li je dan promjene sata 0..1 */
};
Napomena: ako dan promjene sata nije implementiran tada tm_isdst ima negativnu vrijednost.
Broj sekundi moe biti vei od 59 u sluaju prestupnog vremena. Mjeseci su kodiranu tako da 0
oznaava sijeanj, 1 veljau itd. Dani u sedmici su kodirani tako da 0 oznaava nedjelju, 1
ponedjeljak itd. Stvarna godina se dobije tako da se lanu tm_year doda vrijednost 1900 (primjerice u
godini 2002. godini lan tm_year sadri vrijednost 102).

time

time_t time(time_t *tp);
Funkcija time() vraa time_t vrijednost kardinalni broj koji predstavlja trenutno vrijeme (obino je
to broj sekundi od 1.1.1970.). Parametar tp, ako nije NULL, takoer prihvaa trenutno vrijeme u *tp.

localtime, gmtime
Dodatak C - standardna biblioteka C jezika 18

struct tm *localtime(const time_t *t);
struct tm *gmtime(const time_t *t);
Pretvorbu vremena iz formata time_t u struct tm vri se funkcijom localtime(), kada se eli
dobiti lokalno vrijeme, ili funkcijom gmtime() za dobiti univerzalno vrijeme u nultom meridijanu.
Obje funkcije primaju adresu varijable koja sadri vrijeme u formatu time_t, a vraaju pokaziva na
statiku strukturu tipa tm (sadraj se obnavlja pri svakom pozivu ovih funkcija) .

ctime, asctime
Ako se eli dobiti zapis vremena u obliku stringa, mogu se koristiti funkcije

char *ctime(const time_t *t);
char *asctime(const struct tm *tp);
Funkcija ctime() za argument koristi adresu varijable koja sadri vrijeme u formatu time_t, a
funkcija asctime()za argument koristi pokaziva na strukturu tm. Obje funkcije vraaju pokaziva
statikog stringa koji sadri zapis vremena u standardnom formatu. Primjerice, sekvenca naredbi
time_t t = time(NULL);
char *s = ctime(&t);
puts(s);
generira ispis:
Sat May 11 14:21:20 2002
Uoite da je rezultat poziva ctime(&t) ekvivalentan pozivu asctime(localtime(&t)) .

Standardna verzija je prilagoena amerikim standardima. Ako se eli napisati vrijeme u formatu
11.05.2002 14:21
tada se moe koristiti sljedee iskaze:
/* ispisuje datum i vrijeme u formatu 11.05.2002 14:21 */
time_t t = time(NULL);
struct tm *p = localtime(&t);
printf("%.2d.%.2d.%.2d %2d:%.2d\n",
p->tm_mday, p->tm_mon + 1,
p->tm_year +1900,
p->tm_hour, p->tm_min);

strftime

size_t strftime(char *buf, size_t bufsize,
const char *fmt, const struct tm *tp);
Funkcija strftime() se koristi za formatirani ispis vremena. Format se zadaje kao kod printf()
funkcije. Prvi argument je string str u koji se vri formatirani zapis. Drugi argument (bufsize)
ograniava broj znakova stringa. Trei parametar je string u kojem se zapisuje format ispisa nizom
specifikatora oblika %x (kao kod printf() funkcije). Posljednji argument je pokaziva strukture tm.
Funkcija vraa broj znakova u stringu ili 0 ako nije mogue generirati formatirani string. Specifikatori
formata su:

%a kratica od tri slova za ime dana u sedmici (eng. Sun, Mon, Tue,..)
%A puno ime dana u sedmici (eng.)
%b kratica od tri slova za ime mjeseca (eng. Jan, Feb, Mar,...)
%B puno ime mjeseca (eng.)
%c kompletni zapis vremena i datuma
%d dan u mjesecu (1..31)
%H sat u formatu (1..24)
%I sat u formatu (1..12)
%j dan u godini (1..365)
Dodatak C - standardna biblioteka C jezika 19
%m mjesec u godini (1..12)
%M minute
%p AM/PM (eng.) string koji oznaava jutro ili popodne
%S sekunde
%U broj za sedmicu u godini (1..52) - 1 odreen prvom nedjeljom
%w broj za dan u sedmici (0-nedjelja)
%W broj za sedmicu u godini (1..52) - 1 odreen prvim ponedjeljkom
%x kompletni zapis datuma
%X kompletni zapis vremena
%y zadnje dvije znamenke godine
%Y godina u 4-znamenkastom formatu
%Z ime vremenske zone (ako postoji )
%% znak %


mktime
time_t mktime(struct tm *tp);
Funkcija mktime() pretvara zapisa iz strukture tm u time_t format. Korisna je u tzv. kalendarskim
proraunima. Kada je potrebno dodati nekom datumu n dana, tada se moe upisati datum u tm
strukturu, poveati lan tm_mday za n, zatim pozivom mktime() se dobije time_t vrijednost koja
odgovara novom datumu.

difftime
double difftime(time_t t1, time_t t2);
Funkcija difftime() vraa realnu vrijednost koja je jednaka razlici vremena t1 i t1 u sekundama.

clock
clock_t clock(void);
Funkcija clock() slui za preciznije mjerenje vremena nego je to mogue sa prethodnim funkcijama.
Ona vraa vrijednost procesorskog mjeraa vremena, koji starta na poetku programa, u jedinicama
koje su znatno manje od sekunde (nekoliko milisekundi). Koliko je tih jedinica u jednoj sekundi
odreeno je konstantom CLOCKS_PER_SEC. To znai da izraz:

(double)clock()/CLOCKS_PER_SEC
daje vrijednost koja je jednaka vremenu (u sekundama) od startanja programa.

C 7 <signal.h>
U zaglavlju <signal.h> deklarirane su dvije funkcije (signal() i raise()) za prihvat i generiranje
asinkronih prekida programa ili "signala". Za identificiranje nekoliko moguih signala, u ovom
zaglavlju su definirane simbolike cjelobrojne konstante sa sljedeim imenima:

SIGABRT
Signal kojeg generira funnkcija abort().
SIGFPE Signal koji se generira kad nastane greka kod matematikih operacija primjerice pri
djeljenju s nulom.
SIGILL Signal koji se generira ako se pokuava izvriti nepostojea ili nedozvoljena instrukcija
procesora.
SIGINT
Signal koj se generira s tipkovnce (primjerice, Ctrl-C tipkom).
SIGSEGV Signal koji se generira ako se pristupa zatienoj ili nepostojeoj memoriji
("segmentation violations").
SIGTERM
Signal koji se generira kada je proces prekinut nekim vanjskim dogaajem.

Dodatak C - standardna biblioteka C jezika 20
Ovisno o implementaciji kompilatora, mogue su i dodatne definicije identifikatora signala.

raise

int raise(int sig);
Funkcija raise() alje izvrnom programu signal sig.

signal

void (*signal(int sig, void (*func)(int)))(int);
Funkcija signal() se koristi za definiranje akcije koja se treba izvriti kada se pojavi neki signal.
Ukoliko nije definirana radnja koja se vri nakon pojave signala, prekida se program.

Argument sig je signal kojeg treba prihvatiti (jedna od SIGxxx konstanti).
Argument func je ili konstanta SIG_IGN (kojom se zahtijeva ignoriranje signala) ili konstanta
SIG_DFL (kojom se postavlja predodreeni postupak prihvata signala) ili pokaziva na korisniki
definiranu funkciju koja e se izvriti pojavom signala. Ta funkcija mora imati prototip oblika

void signalhandler(int sig);
Argument ove funkcije tipa int je broj signala koji se prihvaa.

Funkcija signal() vraa prethodni oblik prihvata signala; SIG_DFL, SIG_IGN, ili pokaziva na
funkciju. Zbog navedenih svojstava, deklaracija funkcije signal() je kompleksna. To je funkcija
koja vraa pokaziva na funkciju koja prima jedan argument tipa int i vraa void. Prvi argument je
tipa int, a drugi argument je pokaziva na funkciju koja prima jedan argument tipa int i vraa
void.

Primjer: u sljedeem programskom odsjeku pokazano je kako se postavlja poziv funkcije exithandler
u sluaju pojave prekida (interrupt signal - SIGINT), ali samo ako taj signal nije prethodno ignoriran:

extern void exithandler(int);

if(signal(SIGINT, SIG_IGN) != SIG_IGN)
signal(SIGINT, exithandler);

C 8 <setjmp.h>
U zaglavlju <setjmp.h> deklarirane su funkcije setjmp() i longjmp(), pomou kojih se moe
izvriti skok u program i izvan funkcije. Toka u programu na koju se vri skok oznaava se
funkcijom setjmp(), koja pamti stanje stoga i registara procesora i trenutnu programsku lokaciju u
objektu tipa jmp_buf. Kasnije se s bilo kojeg mjesta u programu moe skoiti na ovu poziciju
pozivom funkcije longjmp().

setjmp

int setjmp(jmp_buf context);
Funkcija setjmp() sprema trenutnu programsku lokaciju i stanje procesora u objekt context, koji je
tipa jmp_buf , i vraa vrijednost 0. Kasnije, nakon poziva funkcije longjmp() povratna vrijednost se
moe promijeniti.

longjmp

void longjmp(jmp_buf context, int retval)
Dodatak C - standardna biblioteka C jezika 21
Funkcija longjmp() vri skok na stanje opisano u objektu context, koji je prethodno spremljen
pozivom funkcija setjmp(). Skok se vri na mjesto gdje je prethodno pozvana funkcija setjmp(), pa
se sada vri povrat iz funkcije setjmp()s vrijednou retval.
C 9 <locale.h>
U zaglavlju <locale.h> deklarirane su dvije funkcije za lokalizirane postavke. Poetno, program
zapoima u "C" lokalizaciji, koja se zatim moe promijeniti sa setlocale() funkcijom. Lokalno-
specifine informacije se dijele u nekoliko kategorija, koje se oznaavaju sljdeim konstantama:

LC_COLLATE
Usporedba stringova se vri pomou funkcija strcoll() i strxfrm()
LC_CTYPE
Klasiofikacija znakova pomou funkcija iz <ctype.h>
LC_MONETARY
Monetarne postavke se dobiju funkcijom localeconv()
LC_NUMERIC
Koristi decimalnu toku u funkcijama printf(), scanf()), strtod(), itd.
LC_TIME
Lokalizirani format strftime() funkcije
LC_ALL
Unija prethodnih postavki

setlocale

char *setlocale(int cat, const char *locale);
Funkcija setlocale()ima dva argumenta. Prvi argument je oznaka kategorije koja se postavlja, a drugi
parametar locale je string za oznaku lokalizacije. Ako taj string je jednak C, tada se koristi
predodreena lokalizacija. Prazni string takoer oznaava predodreenu lokalizaciju. Sve ostale
oznake su specifine za pojedinu implementaciju kompilatora. Funkcija vraa pokaziva na string koji
sadri prethodnu locale postavku. Ako se setlocale() pozove s locale = NULL tada funkcija vraa
trenutnu postavku.

localeconv

struct lconv *localeconv(void);
Funkcija localeconv() vraa pokaziva na strukturu lconv koja sadri lokalno-specifine informacije.
Ta struktura je otprilike definirana ovako:

struct lconv
{
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign, *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes, p_sep_by_space;
char n_cs_precedes, n_sep_by_space;
char p_sign_posn, n_sign_posn;
};
decimal_point je oznaka koja se koristi za decimalni zarez.
thousands_sep je separator koji se koristi izmeu grupe znamenki
grouping je string that defines veliinu grupe (primjerice "\3" oznaava da se ponavlje grupa od 3
znaka ).
Dodatak C - standardna biblioteka C jezika 22

Ostali lanovi opisuju monetarno-specifine informacije. Ukratko, int_curr_symbol i currency_symbol
su verzije (internacionalne i lokalne) za lokalnu valutu, mon_decimal_point je decimalna toka,
mon_thousands_sep i mon_grouping dopisuju grupiranje znamenki (analogno s thousands_sep i
grouping), positive_sign i negative_sign su znakovi pozitivnog i negativnog predznaka, int_frac_digits
i frac_digits opisuju broj decimalnih znamenki koje se prikazuju. Ostali lanovi opisuju oznaku valute
i inikatore predznaka.
C 10 <stdarg.h>
U zaglavlju <stdarg.h> su definirani makro naredbe pomou kojih se omoguuje definiranje funkcija s
promjenjljivim brojem parametara.
Koristi se ideja da se argumentima neke funkcije pridijeli lista pokazivaa koja ima apstraktni tip
va_list. U tu svrhu koristi se makro va_start. Zatim se iz ove liste mogu dobiti svi argumenti
pomou makroa va_arg. Na kraju rada, unutar iste funkcije, treba pozvati makro va_end.

va_start

va_start(va_list argp, lastarg);
va_start inicijalizira argp tako da se njime mogu dohvatiti argumenti. lastarg is je ime posljednjeg
fiksnog argumenta funkcije.

va_arg

argtype va_arg(va_list argp, argtype);
va_arg dobavlja vrijednost sljedeeg argumenta koji je tipa argtype. argtype se specificira na isti nain
kako se definira argument sizeof operatora. Tip mora odgovarati tipu sljedeeg argumenta.

va_end

va_end(va_list argp);
va_end oznaava da je zavren pristup promjenjljivoj listi argumenata.

Primjer: u sljedeem programu definirana je funkcija miniprintf(), kojom je pokazano kako je
implementirana printf() funkcija.

#include <stdio.h>
#include <stdarg.h>

void miniprintf(const char *format, ...)
{
va_list argp;
const char *p;
char tmpbuf[25];
int i;

va_start(argp, format);

for(p = format; *p != '\0'; p++) {
if(*p != '%') {
putchar(*p);
continue;
}
switch(*++p)
{
case 'c':
i = va_arg(argp, int); putchar(i);
Dodatak C - standardna biblioteka C jezika 23
break;
case 'd':
i = va_arg(argp, int);
sprintf(tmpbuf, "%d", i); fputs(tmpbuf, stdout);
break;
case 'o':
i = va_arg(argp, int);
sprintf(tmpbuf, "%o", i);
fputs(tmpbuf, stdout);
break;
case 's':
fputs(va_arg(argp, char *), stdout);
break;
case 'x':
i = va_arg(argp, int);
sprintf(tmpbuf, "%x", i); fputs(tmpbuf, stdout);
break;
case '%':
putchar('%');
break;
}
}
va_end(argp);
}
C 11 <stddef.h>
U zaglavlju <stddef.h> definirano je nekoliko tipova i makro naredbi.

NULL Makro koji oznaava konstantu za null pokaziva (vrijednost mu je 0 ili (void
*)0).
size_t Cjelobrojni unsigned tip koji se koristi za oznaavanje veliine memorijskog
objekta.
ptrdiff_t Cjelobrojni tip koji oznaava vrijednosti koji nastaju kod oduzimanja
pokazivaa.
wchar_t Tip wide character koji moe imati znatno vei interval vrijednosti od tipa
char. Koristi se za multinacionalni skup znakova (Unicode).
offsetof() Makro kojm se rauna pomak (eng. offset) u bajtima nekog elementa
strukture, primjerice offsetof(struct tm, tm_year).

Koritenje ovih tipova osigurava portabilnost programa.

C 12 <assert.h>

U zaglavlju <assert.h> definar je makro assert, koji omoguuje testiranje pograma.

void assert(int test_izraz)

Ako je test_izraz jednak nuli, tada

assert(test_izraz)

alje na stdderr poruku, poput ove:

Assertion failed: test_izraz, file filename, line nnn

Dodatak C - standardna biblioteka C jezika 24
i vri poziv funkcije abort(), ime se prekida izvrenje programa. Ime izvorne datoteke (filename) i
broj linije u kojoj je assert, su dobijeni is pretprocesorskih makro naredbi: __FILE__ i __LINE__.

Ako se pri kompiliranju definira makro NDEBUG (s bilo kojom vrijednou) tada se ignorira makro
assert.
C 13 <errno.h>
U zaglavlju <errno.h> deklarirana je globalna varijable errno u kojoj se biljei kd greke koja nastaje
pri koritenju funkcija standardne biblioteke. Takoer su definirane simbolike konstante EDOM and
ERANGE koje oznaavaju kd pogreke kod matematikih operacija.
C 14 <limits.h>
U zaglavlju <limits.h> definirane su simbolike konstante koje oznaavaju interval standardnih
tipova. To su:

CHAR_BIT
broj bitova u tipu char
CHAR_MAX
maksimalna vrijednost od char
CHAR_MIN
maksimalna vrijednost od of char
INT_MAX
maksimalna vrijednost od of int
INT_MIN
minimalna vrijednost od int
LONG_MAX
maksimalna vrijednost od long
LONG_MIN
minimalna vrijednost od long
SCHAR_MAX
maksimalna vrijednost od signed char
SCHAR_MIN
minimalna vrijednost od signed char
SHRT_MAX
maksimalna vrijednost od short
SHRT_MIN
minimalna vrijednost od short
UCHAR_MAX
maksimalna vrijednost od od unsigned char
UINT_MAX
maksimalna vrijednost od unsigned int
ULONG_MAX
maksimalna vrijednost od unsigned long
USHRT_MAX
maksimalna vrijednost od unsigned short
MB_LEN_MAX broj bajta u multibajt znakovnoj sekvenci

C 15 <float.h>
U zaglavlju <float.h> definirane su simbolike konstante koje oznaavaju implementaciju realnih
brojeva s pominom tokom. To su:

FLT_RADIX FLT_ROUNDS
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG
FLT_DIG DBL_DIG LDBL_DIG
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP
FLT_MIN_10_EXP DBL_MIN_10_EXP LDBL_MIN_10_EXP
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP
FLT_MAX_10_EXP DBL_MAX_10_EXP LDBL_MAX_10_EXP
FLT_MAX DBL_MAX LDBL_MAX
FLT_EPSILON DBL_EPSILON LDBL_EPSILON
FLT_MIN DBL_MIN LDBL_MIN


Dodatak C - standardna biblioteka C jezika 25
FLT_RADIX je baza floating-point modela (pr. 2, 16). FLT_ROUNDS je konstanta koja pokazuje
kako se zaokruuje rezultat pri zbrajanju: 0 ako je prema 0, 1 ake je prema najblioj vrijednosti, 2 ako
je prema +, 3 ako je , i -1 znai da nije definirano.

Ostali makroi daju svojstva tipova: float (FLT_), double (DBL_), i long double (LDBL_).
MANT_DIG je broj znamenki (baze FLT_RADIX) u mantisi. DIG daje priblinu preciznost u
ekvivalentnoj bazi 10. MIN_EXP i MAX_EXP daju maksimalni i minimalni eksponent
(MIN_10_EXP i MAX_10_EXP daju njihov ekvivalent u bazi 10). MIN i MAX daju minimalnu i
maksimalnu vrijednost realnog broja. EPSILON je razlika izmeu 1.0 i sljedeeg veeg broja.
C 16 <iso646.h>
U zaglavlju <iso646.h> definirani su makroi za zamjenu operatora koji moda nisu implementirani na
nekom mikro raunalima. To se sljedee definicije:

#define and &&
#define and_eq &=
#define bitand &
#define bitor |
#define compl ~
#define not !
#define not_eq !=
#define or ||
#define or_eq |=
#define xor ^
#define xor_eq ^=


C 17 <wchar.h>

U zaglavlju <wchar.h> definirane su gotovo sve funkcije za rad s znakovima i stringovima koji su tipa
wchar_t. Obino se ASCII znakove naziva prostim znakovima, a znakove tipa wchar_t proirenim
znakovima (eng. wide charracter). Evo kako se inicijalizira proireni znakovni tip i string:

wchar_t c = L'A';
wchar_t *s = L"Hello";
Pored wchar_t tipa definiran wint_t, integralni tip koji moe sadravati vrijednost wchar_t tipa, te
makro WEOF kao oznaka za kraj datoteke.
Operacije sa stringovima proirenih znakova

size_t wcslen(const wchar_t *s);
wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);
wchar_t *wcscat(wchar_t *dest, const wchar_t *src);
wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t n);
wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t n);
int wcscmp(const wchar_t *s1, const wchar_t *s2);
int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n);
int wcscoll(const wchar_t *s1, const wchar_t *s2);
size_t wcsxfrm(wchar_t *dest, const wchar_t *src, size_t n);
wchar_t *wcschr(const wchar_t *s, wchar_t c);
wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
wchar_t *wcsstr(const wchar_t *s, const wchar_t *pat);
size_t wcsspn(const wchar_t *s, const wchar_t *set);
size_t wcscspn(const wchar_t *s, const wchar_t *set);
wchar_t *wcspbrk(const wchar_t *s, const wchar_t *set);
Dodatak C - standardna biblioteka C jezika 26
Ove funkcije (wcsxxx) su ekvivalentne funkcijama za rad s ASCII stringovima (strxxx), osim to se
umjesto pokazivaa na char koristi pokaziva na wchar_t, a broj n se intepretira kao broj wchar_t
znakova.
Operacije s nizovima proirenih znakova

wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t n);
wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t n);
int wmemcmp(const wchar_t *p1, const wchar_t *p2, size_t n);
wchar_t *wmemchr(const wchar_t *p, wchar_t c, size_t n);
wchar_t *wmemset(wchar_t *p, wchar_t c, size_t n);
Ove funkcije (wmemxxx) su ekvivalentne funkcijama za rad s ASCII nizovima (memxxx), osim to se
umjesto pokazivaa na char koristi pokaziva na wchar_t, a broj n se intepretira kao broj wchar_t
znakova.
Pretvorba stringa proirenih znakova u numeriku vrijednost

long int wcstol(const wchar_t *s, wchar_t **endp, int base)
unsigned long int wcstoul(const wchar_t *s, wchar_t **endp, int base);
double wcstod(const wchar_t *s, wchar_t **endp);
Ove funkcije (wcsxxx) su ekvivalentne funkcijama za rad s ASCII stringovima (strxxx), osim to se
umjesto pokazivaa na char koristi pokaziva na wchar_t,
Pretvorba vremena

size_t wcsftime(wchar_t *buf, size_t bufsize,
const wchar_t *format, const struct tm *tp);
wcsftime() izvrava operaciju analognu izvrenju strftime().
Rastav stringa proirenih znakova na lekseme

wchar_t *wcstok(wchar_t *s, const wchar_t *sep, wchar_t **state);
Funkcija wcstok() vri rastav stringa (s) ne lekseme koji su odvojeni znacima sepatatora (sep)
analogno funkciji strtok(), osim to je temeljni tip wchar_t, i dodan je trei argument state, koji je
pokaziva na objekt tipa wchar_t *; wcstok() koristi ovaj objekt za pohranu stanja izmeu uzastopnih
poziva funkcije.
Ulazno izlazne operacije s proirenim znakovima

getwchar, getwc, fgetwc

wint_t getwchar(void);
wint_t getwc(FILE *fp);
wint_t fgetwc(FILE *fp);
Ove funkcije itaju znakove iz toka fp ili stdin (implicitno se vri pretvotba multibajt-znakovnih
sekvenci, kao da je pozvana funkcija mbrtowc).Ako je kraj datoteke funkcije vraaju WEOF.
Funkcionalnost im je ista kao kod funkcija getchar, getc, i fgetc.


putwchar, putwc, fputwc

wint_t putwchar(wchar_t c);
wint_t putwc(wchar_t c, FILE *fp);
Dodatak C - standardna biblioteka C jezika 27
wint_t fputwc(wchar_t c, FILE *fp);
Ove funkcije upisuju wchar_t znakove u toka fp ili stdin (implicitno se vri pretvotba multibajt-
znakovnih sekvenci, kao da je pozvana funkcija mbrtowc). Funkcionalnost im je ista kao kod funkcija
putchar, putc, i fputc.

wprintf, fwprintf

int wprintf(const wchar_t *, ...);
int fwprintf(FILE *fp, const wchar_t *, ...);
Ove funkcije su ekvivalentne funkcijama printf() i fprintf(), osim to se u tok zapisuje multibajt
znakovna sekvenca, kao da je pozvan fputwc(). U format stringu specifikatori %c i %s dalje znaa da
se oekuje prosti znakovi, a da bi se ispisali proireni znakovi treba koristiti specifikatore %lc i %ls.

wscanf, fwscanf

int wscanf(const wchar_t *, ...);
int fwscanf(FILE *fp, const wchar_t *, ...);
Ove funkcije su ekvivalentne funkcijama scanf() i fscanf(), osim to se format string tretira kao niz
proirenih znakova, a tok koji se oitava tretira se kao multibajt znakovni niz. U format stringu
specifikatori %c, %s i %[ znae da se oekuje prosti znakovi, a da bi se unijeli proireni znakovi
treba koristiti specifikatore %lc , %ls i %l[.

fgetws, fputws

wchar_t *fgetws(wchar_t *, int, FILE *fp);
int fputws(const wchar_t *, FILE *fp);
Ove funkcije su slue itanju ili zapisu linije teksta analogno funkcijama fgets() i fputs().

ungetwc

wint_t ungetwc(wint_t c, FILE *fp);
Funkcija ungetwc() vraa proireni znak c natrag u ulazni tok fp, analogno ungetc()funkciji.

swprintf, swscanf

int swprintf(wchar_t *buf, size_t bufsize, const wchar_t *format, ...;
int swscanf(const wchar_t *buf, const wchar_t *format, ...);
Funkcija swprintf() generira string buf, makimalne veliine bufsize, a funkcija swscanf()
dobavlja podatke iz stringa buf, prema zadanom formatu, analogno funkcijama sprintf() i
sscanf().

vwprintf, vfwprintf, vswprintf

int vwprintf(const wchar_t *format, va_list argp);
int vfwprintf(FILE *fp, const wchar_t *format, va_list argp);
int vswprintf(wchar_t *buf, size_t bufsize,
const wchar_t *format, va_list argp);
Ove funkcije su analogne funkcijama vprintf, vfprintf, and vsprintf. Argument vswprint() bufsize
omoguuje kontrolu makimalne duljine stringa kao kod swprintf().

fwide

int fwide(FILE *fp, int mode);
Dodatak C - standardna biblioteka C jezika 28
Svaki tok ima "orijentaciju" koja pokazuje da li se on koristi s normalnim ili multibajt znakovima
(pomou funkcija iz ove sekcije) Poetno je tok neorjentiran, ali se nakon prve upotrebe prebacuje u
"bajt-orijentirani" or "proireno-orijentirani" mod.
Funkcijom fwide() moe se postaviti orijentacija toka fp, tako da se argument mode postavi na
vrijednost veu od nule za "proireno-orijentirani" mod, ili na vrijednost manju od nule za "bajt-
orijentirani" mod. Funkcija vraa vrijednost trenutne orijentacije (0 znai da je tok neorijentiran).

Dodatne pretvorbe

btowc, wctob

wint_t btowc(int c);
int wctob(wint_t wc);
Funkcija btowc() pretvara normalni znak c u proireni znak. Funkcija wctob() pretvara proireni znak
wc u normalni znak. Vraa znak ili EOF ako pretvorba nije mogua.

mbrlen

size_t mbrlen(const char *s, size_t n, mbstate_t *state);
Funkcija mbrlen() je slina funkciji mblen(). Njome se moe dobiti i duljinu prekinute multibajt
sekvence. Poetni se dio referira u objektu state, a na preostali dio pokazuje pokaziva s.
Vraa vrijednost kao funkcija mbrtowc().

mbrtowc, wcrtomb

size_t mbrtowc(wchar_t *dest, const char *src, size_t n,
mbstate_t *state);
size_t wcrtomb(char *dest, wchar_t src, mbstate_t *state);

Ove su funkcije sline funkcijama mbtowc() i wctomb(), osim to mogu obraditi i dio multibajt
sekvence koja je prekinuta, uz uvjet da je stanje pretvorbe zabiljeeno u objektu na kojeg pokazuje
state.
Funkcija mbrtowc() pretvara multibajt sekvencu src u proiren znak u *dest i vraa broj bajta na koje
pokazuje src koji tvore ispravnu multibajt sekvencu, ili 0 ako src==NULL, ili -1 ako nastane greka, ili
-2 ako nije pronaena kompletna multbajt sekvenca (upotrebljena za *state).
Funkcija wcrtomb() pretvara proireni znak src u multibajt sekvencu dest i vraa broj bajta zapisanih
u dest, ili -1 ako nastane greka.

mbsrtowcs, wcsrtombs

size_t mbsrtowcs(wchar_t *dest, const char **srcp, size_t n,
mbstate_t *state);
size_t wcsrtombs(char *dest, const wchar_t **srcp, size_t n,
mbstate_t *state);
Ove su funkcije sline funkcijama mbtowcs() i wctombs(), osim to mogu obraditi i dio multibajt
sekvence koja je prekinuta, uz uvjet da je stanje pretvorbe zabiljeeno u objektu na kojeg pokazuje
state.
String koji se pretvara prenosi se po referenci *srcp, kako bi se mogao aurirati da pokazuje na
preostali dio nepretvorenog stringa. Ako je broj n nedovoljan (kao broj proirenih znakova za
mbsrtowcs ili bajta za wcsrtombs) za kapacitet odredinog stringa rezultata, *srcp se postavlja da
pokazuje na nepretvoreni ulaz, a *state se aurira da odrazi prekinuto stanje pretvorbe.

mbsinit
Dodatak C - standardna biblioteka C jezika 29

int mbsinit(const mbstate_t *p);

Funkcija mbsinit() vraa nenultu vrijednost ako je objekt stanja na kojeg pokazuje p u poetnom
stanju, ili ako je p==NULL .

C 18 <wctype.h>
U zaglavlju <wctype.h> deklarirano je nekoliko funkcija, analognih funkcijama iz <ctype.h> za
klasificiranje i pretvorbu znakova tipa wchar_t.
Klasifikacija proirenih znakova

int iswupper(wint_t c);
int iswlower(wint_t c);
int iswalpha(wint_t c);
int iswdigit(wint_t c);
int iswalnum(wint_t c);
int iswxdigit(wint_t c);
int iswspace(wint_t c);
int iswpunct(wint_t c);
int iswprint(wint_t c);
int iswgraph(wint_t c);
int iswcntrl(wint_t c);

Funkcije (iswxxx) su analogne funkcijana (isxxx), osim to je argument ovih funkcija tipa wint_t.

Dodatne funkcije za klasifikacija proirenih znakova

wctype_t wctype(const char *classname);
int iswctype(wint_t c, wctype_t classtok);

Funkcija wctype() prihvaa argument classname u kojem se indicira klasifikacija i vraa token tipa
wctype_t (definiran je u <wctype.h>). Funkcija wctype() prihvaa stringove: "upper", "lower",
"alpha", "digit", "alnum", "xdigit", "space", "punct", "print", "graph", i "cntrl" (koji odgovaraju
predefiniranoj klasifikaciji ), plus korisniki definirani string za klasifikaciju.
Funkcija iswctype() prihvaa argumente znak c i token classtok koji je prethodno dobijen funkcijom
wctype(), te vrae nenultu vrijednost ako znak ne pripada klasifikaciji

Funkcije za pretvorbu proirenih znakova i stringova

wint_t towupper(wint_t c);
wint_t towlower(wint_t c);
Ove funkcije su ekvivalentne funkcijana toupper() i tolower(), za normalne znakove.

wctrans_t wctrans(const char *convname);
wint_t towctrans(wint_t c, wctrans_t convtok);
Funkcija wctrans()prihvaa argument convname u kojem se indicira znakovna pretvorba i vraa token
tipa wctrans_t koji se koristi za izvrenje pretvorbe (wctrans_t je definiran u <wctype.h>).
Funkcija towctrans() vri pretvorbu proirenog znaka c prema tokenu convtok koji je prethodno
dobijen funkcijom wctrans(), i vraa pretvoreni proireni znak.
Dodatak C - standardna biblioteka C jezika 30
Funkcija wctrans() prihvaa stringove "toupper" i "tolower" (koji oznaavaju predefinirani nain
pretvorbe), plus korisniki definirani string za pretvorbu.

You might also like