Capitol Ul 12
Transcript of Capitol Ul 12
Capitolul 12 – Funcţii standard
Biblioteca C standard cuprinde o mare varietate de func\ii, instrumente puternice =i eficiente ]n elaborarea programelor. O parte din aceste func\ii, cea mai uzual[, a fost deja prezentat[ de-a lungul lucr[rii. }n continuare prezent[m prototipurile func\iilor standard C, mai importante, ]nso\ite de un scurt comentariu privind argumentele lor, valorile ]ntoarse =i efectul ac\iunii lor.
Se poate face o clasificare a func\iilor C dup[ cum urmeaz[:
func\ii pentru opera\ii de intrare/ie=ire func\ii pentru prelucrarea caracterelor func\ii pentru prelucrarea =irurilor de
caractere func\ii pentru gestiunea memoriei heap func\ii matematice func\ii pentru gestiunea timpului
UNC|II PENTRU OPERA|II DE INTRARE/IE+IRE
FUNC|II DESCHIDERE/}NCHIDERE FI+IER
FILE * fopen (const char * numefis, const char mod);
deschide fi=ierul cu numele numefis =i ]l asocieaz[ unui flux identificat printr-un pointer. Modul de deschidere este specificat de mod (vezi Capitolul 10). Intoarce un pointer c[tre o structur[ FILE dac[ opera\ia a avut succes =i un pointer de valoare NULL, dac[ opera\ia a e=uat.
int fclose(FILE *fp);
]nchide fi=ierul deschis cu fopen(). Pointerul fp este pointerul fi=ier returnat la apelarea func\iei fopen().
FUNC|II CARE CONTROLEAZ{ INDICATORUL DE
POZI|IE }N FI+IER
248
Capitolul 12 – Funcţii standard
int fseek(FILE *fp,long nr_octeti,int origine);
pozi\ioneaz[ indicatorul de pozi\ie ]n fi=ierul fp la valoarea specificat[ de origine la care se adaug[ deplasarea egal[ cu nr_octeti (vezi Capitolul 10).
int fgetpos(FILE *fp,long int *poz);
memoreaz[ valoarea curent[ a indicatorului de pozi\ie ]n obiectul indicat de poz. }n caz de succes se ]ntoarce o valoare diferit[ de 0, iar ]n caz de eroare valoarea 0.
int fsetpos(FILE *fp,const long int *poz);
seteaz[ indicatorul de pozi\ie la valoarea *poz, ob\inut[ anterior cu func\ia fgetpos(). }n caz de succes se ]ntoarce o valoare diferit[ de 0, iar ]n caz de eroare valoarea 0.
long ftell(FILE *fp);
]ntoarce valoarea curent[ a indicatorului de fi=ier sau -1 ]n caz de eroare.
void feof(f);
]ntoarce o valoare diferit[ de 0 dac[ indicatorul de pozi\ie se afl[ la sf`r=itul fi=ierului =i 0 ]n caz contrar.
FUNC|II PENTRU CITIREA +I SCRIEREA
CARACTERELOR
int fgetc(FILE *fp);
]ntoarce valoarea caracterului c`nd opera\ia de citire din fi=ierul fp are succes sau EOF c`nd s-a atins sf`r=itul fi=ierului sau a avut loc o eroare.
int fputc(int c,FILE *fp);
]ntoarce caracterul scris ]n fi=ierul fp, ]n caz de succes sau EOF ]n caz de eroare.
int ungetc(int c,FILE *fp);
249
Capitolul 12 – Funcţii standard
se repune un caracter ]n bufferul asociat fi=ierului fp. Se ]ntoarce c ]n caz de succes sau EOF ]n caz de eroare.
int getc(FILE *fp);
este similar[ cu fgetc() (este macro-instruc\iune).int getchar(void);
este echivalent[ cu fgetc(stdin);int putc(int c, FILE *fp);
este similar[ cu fputc() (este macro-instruc\iune).int putchar(int c);
este echivalent[ cu fputc(int c,stdout);
FUNC|II PENTRU CITIREA +I SCRIEREA +IRURILOR
DE CARACTERE
char *fgets(char *str,int lg, FILE *fp);
cite=te din fi=ier un =ir de lungime cel mult lg-1 caractere =i le transfer[ ]n =irul str. }n caz de succes este ]ntoars[ adresa =irului str, iar ]n caz de eroare sau dac[ se atinge sf`r=it de fi=ier se ]ntoarce valoarea NULL.
int fputs(const char *sir, FILE *fp);
scrie ]n fi=ierul fp =irul precizat la adresa sir. }n caz de succes ]ntoarce ultimul caracter scris, iar ]n caz de insucces ]ntoarce caracterul EOF.
char *gets(char *sir);
cite=te un =ir de caractere de la tastatur[ =i ]l depune ]n sir. Caracterul ’\n’ nu se include ]n =ir =i se adaug[ terminatorul ’\0’. Func\ia ]ntoarce sir ]n caz de succes sau EOF ]n caz de eroare.
int puts(const char *sir);
scrie =irul sir pe ecran ]ntorc`nd ultimul caracter scris sau EOF ]n caz de eroare.
250
Capitolul 12 – Funcţii standard
FUNC|II DE INTRARE/IE+IRE CU FORMAT
int fscanf(FILE *fp, const char *sir_format);
]ntoarce num[rul de valori pentru care citirea, conversia =i memorarea datelor a fost f[cut[ corect. Dac[ apare o eroare ]nainte de a ]ncepe citirea se ]ntoarce EOF.
int scanf(const char *sir_format);
este echivalent[ cu func\ia
int fscanf(stdin, const char *sir_format);
int sscanf(char *sir, const char *sir_format);
cite=te date din =irul de caractere sir conform formatului.
Valorile ]ntoarse de func\iile scanf() =i sscanf() sunt similare celor ]ntoarse de func\ia fscanf().
int fprintf(FILE *fp, const char *sir_format);
]ntoarce num[rul de caractere scrise efectiv sau o valoare negativ[ ]n caz de insucces.
int printf(const char *sir format);
este echivalent[ cu func\iafprintf(stdout, const char *sir_format);
int sprintf(char *sir,const char *sir_format);
scrie date conform formatului ]n =irul sir.Similare cu func\iile fprintf(), printf(), sprintf()
sunt func\iile vfprintf(), vprintf() respectiv vsprintf(), pe care nu le prezent[m ]n aceast[ lucrare. Pentru documentare se poate consulta [2].
251
Capitolul 12 – Funcţii standard
FUNC|II PENTRU CITIREA +I SCRIEREA
BLOCURILOR DE DATE
size_t fread(void *buf, size_t nr_oct, size_t nb, FILE *fp);
cite=te din fi=ierul fp, nb blocuri, fiecare cu lungimea nr_oct =i le transfer[ ]n zona specificat[ de buf. }ntoarce num[rul de blocuri citite efectiv.size_t fwrite(const void *buf,size_t nr_oct,
size_t nb, FILE *fp);
scrie ]n fi=ierul fp, nb blocuri preluate din zona specificat[ de buf, fiecare bloc av`nd lungimea egal[ cu nr_octeti. Se ]ntoarce num[rul de blocuri scrise efectiv.
FUNC|II PENTRU TESTAREA APARTENEN|EI LA
CLASE DE CARACTERE
Prototipurile acestor func\ii apar ]n fi=ierul antet ”ctype.h”. Func\iile se aplic[ unui parametru de tip ]ntreg =i ]ntorc valori diferite de 0 dac[ e satisf[cut[ condi\ia de apartenen\[ =i 0 ]n caz contrar.
int isalnum(int c); testeaz[ dac[ c e alfanumericint isalpha(int c); testeaz[ dac[ c e alfabeticint iscntrl(int c); testeaz[ dac[ c e caracter de control
(FF,NL, CR, HT, VT, BEL, BS);
int isdigit(int c); testeaz[ dac[ c este cifr[ zecimal[int isgraph(int c); testeaz[ dac[ c este caracter grafic f[r[ spa\iuint islower(int c); testeaz[ dac[ c este litera mic[int isprint(int c); testeaz[ dac[ c e caracter tip[ribil
inclusiv spa\iuint ispcmct(int c); testeaz[ dac[ c este caracter
tip[ribil f[r[ spa\iu sau caracter alfanumeric
252
Capitolul 12 – Funcţii standard
int isspace(int c); testeaz[ dac[ c este CR, FF, HT, VT, NL, spa\iu
int isupper(int c); testeaz[ dac[ c este liter[ mareint isxdigit(int c); testeaz[ dac[ c este
cifr[ hexazecimal[ (0-9, A-F sau a-f);
Tot aici amintim func\iile tolower() =i toupper():
int tolower(int c); converte=te o liter[ mic[ la litera mare corespunz[toare
int toupper(int c); converte=te o liter[ mare la litera mic[ corespunz[toare
Pentru ambele func\ii, c r[m`ne nemodificat dac[ nu este liter[!
UNC|II PENTRU PRELUCRAREA +IRURILOR DE
CARACTERE
Se deosebesc trei categorii de func\ii:
func\ii pentru citirea =i scriere =irurilor, prezentate deja (care au prototipurile ]n stdio.h)
func\ii cu prototipul in string.h (copiere, comparare, concatenare, ini\ializare =iruri)
func\ii de conversie a =irurilor (cu prototipul in stdlib.h)
253
Capitolul 12 – Funcţii standard
FUNC|II CU PROTOTIPUL IN STRING.H
Exist[ dou[ categorii de func\ii: func\ii care se refer[ la =iruri care se termin[ prin ’\0’ =i func\ii ]n care =irurile sunt v[zute pur =i simplu ca tablouri de caractere (f[r[ terminatorul ’\0’).
Func\iile care se refer[ la =iruri cu terminator ’\0’ sunt:
char *strcat(char *sir1, const char *sir2);
concateneaz[ sir2 la sir1 =i returneaz[ sir1.char *strchr(const char *sir, int c);
caut[ c ]n =irul de caractere sir ]ntorc`nd ]n caz de succes pozi\ia lui, iar ]n caz contrar valoarea NULL.
int strcmp(const char sir1, const char sir2);
compar[ lexicografic =irurile sir1 =i sir2 =i ]ntoarce o valoare
<0 dac[ sir1<sir2=0 dac[ sir1=sir2>0 dac[ sir1>sir2
char *strcpy(char *sir1, const char *sir2);
copiaz[ =irul sir2 ]n =irul sir1 =i ]ntoarce sir1.size_t strcspn(const char *sir1, const char *sir2);
]ntoarce lungimea prefixului =irului sir1 care nu con\ine nici unul din caracterele =irului sir2.
char *strerror(int er_cod);
]ntoarce un pointer c[tre un =ir ce reprezint[ un mesaj de eroare corespunz[tor codului er_cod.
size_t strlen(const char *sir);
]ntoarce num[rul de caractere din =irul sir, exclusiv terminatorul ’\0’.char *strncat(char *sir1, const char *sir2,
size_t nr);
254
Capitolul 12 – Funcţii standard
concateneaz[ cel mult nr caractere din sir2 la sir1 =i ]ntoarce sir1.int *strncmp(const char *sir1, const char *sir2, size_t
nr);
compar[ cel mult nr caractere din sir1 =i sir2 =i ]ntoarce valori la fel ca func\ia strcmp().char *strncpy(char *sir1, const char *sir2,
size_t nr);
copiaz[ cel mult nr caractere din =irul sir2 ]n =irul sir1 =i ]ntoarce sir1.char *strpbrk(const char *sir1, const char *sir2);
]ntoarce un pointer la prima apari\ie ]n sir1 a oric[rui caracter din sir2 sau NULL dac[ nici un caracter din sir2 nu se afl[ ]n sir1.
char * strrchr(const char *sir, int c);
]ntoarce pointerul la ultima apari\ie a lui c ]n sir sau NULL dac[ c nu apare ]n sir.
size_t strspn(const char *sir1, const char *sir2);
]ntoarce lungimea prefixului =irului sir1 care con\ine numai elemente din sir2.
char *strstr(const char *sir1, const char *sir2);
]ntoarce un pointer la prima apari\ie ]n sir1 a =irului sir2 sau NULL dac[ sir2 nu este sub=ir al =irului sir1.
char *strtok(char *sir1, const char sir2);
caut[ ]n sir1 sub=iruri delimitate de caractere din =irul sir2.
Urm[toarele func\ii se refer[ la tablouri de caractere (f[r[ a avea terminatorul ’\0’ ca la =iruri).void *memchr(const void *tablou, int c, size_t nr);
caut[ ]n tabloul indicat prin tablou, prima apari\ie a lui c printre cele nr caractere. }ntoarce adresa lui ]n caz de succes sau NULL ]n caz contrar.
255
Capitolul 12 – Funcţii standard
void memcmp(const void *tablou1, const void *tablou2, size_t nr);
compar[ ]n sens lexicografic primele nr caractere ale tablourilor tablou1 =i tablou2. }ntoarce un ]ntreg calculat ca la func\ia strcmp().void *memcpy(void *tablou1, const void *tablou2, size_t
nr);
copiaz[ nr caractere din tablou2 ]n tabloul indicat de tablou1. Dac[ tablourile se suprapun efectul este nedefinit.void *memmove(void *tablou1, const void *tablou2,
size_t nr);
copiaz[ nr caractere din tablou2 ]n tablou1. Tablourile se pot suprapune.
void *memset(void *tablou, int c, size_t nr);
copiaz[ c (octetul s[u inferior) ]n primele nr caractere ale tabloului tablou.
FUNC|II DE CONVERSIE A +IRURILOR
Urm[toarele func\ii realizeaz[ conversii ale =irurilor de caractere ]n valori numerice.
double atof(const char *str);
]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r real. +irul trebuie s[ con\in[ o valoare numeric[ scris[ corect, ]n caz contrar se ]ntoarce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de punct =i de literele e sau E (care intervin ]n mod natural ]n reprezentarea unui num[r ]n virgul[ mobil[).
int atoi(const char *str);
256
Capitolul 12 – Funcţii standard
]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r ]ntreg. +irul trebuie s[ con\in[ o valoare ]ntreag[ corect scris[, ]n caz contrar se ]ntorce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de cifr[.
int atol(const char *str);
]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la o valoare long int. +irul trebuie s[ con\in[ o valoare ]ntreag[ valid[, ]n caz contrar se ]ntoarce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de cifr[.
double strtod(char *str, char **sf);
]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r ]n format double, ignor`nd spa\iile libere ini\iale. +irul trebuie s[ con\in[ o valoare numeric[ corect scris[, ]n caz contrar se ]ntoarce valoarea zero. Delimitatorul final poate fi orice caracter diferit de punct =i de literele e sau E. }n *sf se depune pointerul la delimitatorul final din sir.long strtol(const char *str, char **sf, int radix);
]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str ignor`nd spa\iile libere ini\iale ]ntr-un num[r de tip long, reprezentat ]n baza de numera\ie stabilit[ de radix. Dac[ radix este zero se consider[ c[ baza este 8, 10 sau 16 ]n caz contrar baza este dat[ de valoarea radix aflat[ obligatoriu ]ntre 2 =i 36. Delimitatorul poate fi orice caracter care nu poate intra ]n componen\a unui num[r ]ntreg. Dac[ nu se poate realiza conversia se ]ntoarce valoarea zero. }n *sf se depune pointerul la delimitatorul final din =ir.unsigned long strtoul(const *start, char **sf,
int radix);
ac\ioneaz[ similar cu func\ia strtol() cu excep\ia faptului c[ ]ntoarce ]n caz de succes o valoare unsigned long.
257
Capitolul 12 – Funcţii standard
UNC|II PENTRU GESTIUNEA MEMORIEI HEAP
void *calloc(size_t nr, size_t nr_oct);
aloc[ o zon[ compact[ din memoria heap pentru un tablou av`nd nr elemente fiecare de lungime nr_oct octe\i. }ntoarce un pointer c[tre primul octet al tabloului sau NULL dac[ nu exist[ suficient[ memorie pentru alocare.
void *free(void *ptr);
dealoc[ zona de memorie indicat[ de ptr, alocat[ anterior cu func\iile calloc(), malloc() sau realloc().
void *malloc(size_t nr_oct);
aloc[ o zon[ compact[ din memoria heap de dimensiune nr_oct octe\i. }ntoarce un pointer la primul octet din zona de memorie alocate sau NULL dac[ nu exist[ spa\iu disponibil.
void *realloc(void *ptr, size_t nr_oct);
realoc[ zona de memorie indicat[ de ptr (alocat[ anteriror cu ajutorul func\iilor calloc() =i malloc()) la valoarea dat[ de nr_oct octe\i. }ntoarce un pointer la zona realocat[ sau NULL dac[ nu exist[ suficient spa\iu de memorie pentru alocarea celor nr_oct octe\i, situa\ie ]n care zona ini\ial[ de memorie r[m`ne nemodificat[.
258
Capitolul 12 – Funcţii standard
UNC|II MATEMATICE
Standardul ANSI C define=te 22 func\ii matematice frecvent utilizate ]n programe. Prototipurile lor sunt con\inute de fi=ierul antet ”math.h”. Argumentele func\iilor sunt, cu mici excep\ii, de tip double iar valorile ]ntoarse sunt de tip double. Principalele erori care pot apare la apelul func\iilor sunt: eroare de domeniu =i eroare de reprezentare.
Eroarea de domeniu apare atunci c`nd argumentele func\iei sunt ]n afara domeniului s[u de defini\ie (de exemplu valori negative folosite drept argumente pentru func\ia logaritm), iar eroarea de reprezentare apare atunci c`nd rezultatul ]ntors de func\ie nu poate fi reprezentat.
Aceste erori provoac[ setarea variabilei globale incorporate errno la valorile EDOM respectiv ERANGE. Cele dou[ macrocomenzi sunt definite ]n fi=ierul antet ”errno.h”. }n situa\iile de eroare descrise se ]ntoarce o valoare definit[ la implementare, ]n cazul erorii de domeniu =i respectiv valoarea HUGE_VAL (o valoare <mare> definit[ ]n fi=ierul antet ”math.h”) ]n cazul erorii de reprezentare. Argumentele func\iilor trigonometrice care sunt unghiuri sunt considerate ]n radiani.
double acos(double x); arccos de xdouble asin(double x); arcsinus de xdouble atan(double x); arctangent[ de xdouble atan2(double y,double x); arctangent[ de y/xdouble ceil(double x); cel mai mic ]ntreg >= xdouble cos(double x); cosinus de xdouble cosh(double x); cosinus hiperbolic de xdouble exp(double x); exponen\ial[ e la xdouble fabs(double x); valoarea absolut[ a lui xdouble floor(double x); cel mai mare ]ntreg <= xdouble fmod(double x,int y); restul ]mp[r\irii lui x la y
v[zu\i ca ]ntregi (x modulo y)
259
Capitolul 12 – Funcţii standard
double frexp(double x,double exp);intoarce valoarea mantisei num[rului x si memoreaz[ valoarea exponentului ]n exp astfel ]nc`t x=mantisa*2exp (mantisa e cuprins[ ]ntre 0.5 =i 1).
double ldexp(double x,int exp); calculeaz[ x*2exp
double log(double x); calculeaz[ logaritm natural de xdouble log10(double x); calculeaz[ logaritm zecimal de xdouble modf(double x,double *pin); descompune un
num[r x de tip double ]n partea sa frac\ionar[ pe care o ]ntoarce =i partea ]ntreag[ pe care o memoreaz[ ]n pin
double pow(double x,double y); ]ntoarce xy pentru x =i y apar\in`nd domeniul de defini\ie
double sin(double x); sinus de xdouble sinh(double x); sinus hiperbolic de xdouble sqrt(double x); r[d[cina p[trat[ a lui xdouble tan(double x); tangent[ de xdouble tanh(double x); tangent[ hiperbolic[ de x
UNC|II PENTRU GESTIUNEA TIMPULUI
Prototipurile func\iilor care gestioneaz[ timpul se g[sesc ]n fi=ierul header ”time.h”. Acest header con\ine defini\iile a patru tipuri de date:
size_t, clock_t, time_t =i tm.
Tipul size_t reprezint[ un ]ntreg f[r[ semn. Tipurile clock_t =i time_t se folosesc la reprezentarea orei =i a datei sistemului, ca date de tip long integer. Structura standard de tip struct tm are alc[tuirea urm[toare:
struct tm
260
Capitolul 12 – Funcţii standard
{int tm_sec;/* secunde 0...59 */int tm_min;/* minute 0...59 */int tm_hour;/* ore 0...23 */int tm_mday;/* ziua din luna 1...31 */int tm_mon;/* luna 0...11 */int tm_year;/* anul >=1900 */int tm_wday;/* ziua saptamanii 0...6 */int tm_yday;/* ziua din an 0...365 */int tm_isdst;/* indicator al orei de vara este:
>0 daca functioneaza=0 daca nu functioneaza<0 daca nu exista informatii in domeniu */
}
List[m mai jos prototipurile celor mai uzuale func\ii cuprinse ]n fi=ierul ”time.h”
char *asctime(const struct tm *ptr);
converte=te timpul din structura indicat[ de pointerul ptr ]ntr-un =ir de forma
zi luna data ore:minute:secunde an\n\0, unde
pointerul ptr este ob\inut cu ajutorul func\iei localtime() sau cu functia gmtime().
clock_t clock(void);
}ntoarce num[rul de impulsuri de ceas, efectuate o dat[ cu lansarea programului ]n execu\ie. Transformarea ]n secunde se face ]mp[r\ind aceast[ valoare la macroul CLOCKS_PER_SEC care d[ num[rul de b[t[i pe secund[ ale ceasului.
char *ctime(const time_t *ptr);
converte=te timpul de calendar din structura indicat[ de pointerul ptr ]ntr-un =ir de forma
zi luna data ore:minute:secunde an\n\0
Pointerul ptr este ob\inut cu ajutorul func\iei time(). Ea este echivalent[ cu asctime(local(time));
double diff_time(time_t timp2, timp_t timp1);
]ntoarce valoarea timp2-timp1 exprimat[ ]n secunde.
261
Capitolul 12 – Funcţii standard
struct tm *gmtime(const time_t *ptr);
converte=te timpul de calendar indicat de pointerul ptr ]n Timp Coordonat Universal (Universal Coordinated Time) ]ntorc`nd un pointer la o structur[ de tip tm. Dac[ nu este disponibil se ]ntoarce NULL. Pointerul ptr este ob\inut, printr-un apel al func\iei time().
struct tm *localtime(const time_t *ptr);
converte=te tipul de calendar indicat de pointerul ptr ]n timp local ]ntorc`nd un pointer la o structur[ de tip tm. Dac[ nu e disponibil se ]ntoarce NULL. Pointerul ptr e ob\inut printr-un apel al func\iei time().
size_t strftime(char *sir, size_t dimmax,const char *sir_format, const struct tm *ptr);
converte=te datele din structura indicat[ de pointerul ptr ]n =irul sir, conform cu formatul sir_format.
time_t time(time_t *ptr);
]ntoarce ora curent[ calendaristic[ a sistemului sau –1 dac[ nu exist[ aceast[ facilitate.
Se poate apela cu ptr=NULL sau cu o adres[ a unei variabile de tip time_t. }n ultimul caz valoarea ]ntoars[ se atribuie de asemenea variabilei indicate de ptr.
LTE FUNC|II UTILE
int abs(int intr); /* fisier header stdlib.h */
]ntoarce un ]ntreg egal cu valoarea absolut[ a ]ntregului intr.void clearerr(FILE *fp); /* fisier header stdio.h */
=terge indicatorii de eroare =i de sf`r=it de fi=ier.div_t div(int numarator, int numitor);
/* fisier header stdlib.h */
262
Capitolul 12 – Funcţii standard
]ntoarce o structur[ de tip div_t care con\ine c`tul =i restul ]mp[r\irii num[r[tor la numitor ]n membrii quot, respectiv rem ai acestei structuri.
void exit(int cod); /* fisier header graph.h */
produce ie=irea dintr-un program =i revenirea ]n sistemul de operare. Dac[ valoarea parametrului cod este 0 sau EXIT_SUCCES se indic[ terminarea cu succes a programului, iar dac[ este diferit de 0 sau EXIT_FAILURE se indic[ terminarea cu eroare a programului.
int ferror(FILE fp); /* fisier header stdio.h */
]ntoarce fie valoarea 0 indic`nd faptul c[ nu are loc o eroare sau o valoare diferit[ de 0 dac[ indicatorul de eroare asociat lui fp este pozi\ionat.
int fflush(FILE fp); /* fisier header stdio.h */
gole=te bufferul asociat unui fi=ier deschis pentru scriere sau citire/scriere. Efectul este nedefinit dac[ fi=ierul a fost deschis numai pentru citire. }ntoarce EOF ]n caz de eroare sau 0 ]n caz normal.
long labs(long lintr); /* fisier header stlib.h */
]ntoarce un ]ntreg egal cu valoarea absolut[ a ]ntregului lintr.ldiv_t ldiv(long numarator, long numitor);
/* fisier header stdlib.h */
]ntoarce o structur[ de tip ldiv_t care con\ine c`tul =i restul ]mp[r\irii ]ntre num[r[tor =i numitor ]n membrii quot =i rem de tip long ai acestei structuri.int remove(const char *numefis);
/* fisier header stdio.h */
=terge fi=ierul cu nume numefis. }ntoarce 0 ]n caz de succes =i o valoare diferit[ de 0 ]n caz de eroare.int rename(const char *nume_nou, const char *nume_vechi); /* fisier header stdio.h */
263
Capitolul 12 – Funcţii standard
redenume=te un fi=ier. }ntoarce 0 ]n caz de succes =i o valoare diferit[ de 0 ]n caz de eroare.
int rand(void); /* fisier header stdlib.h */
]ntoarce un num[r ]ntreg uniform aleator din intervalul [0,RAND_MAX].int srand(unsigned int seed);
/* fisier header stdlib.h */
ini\ializeaz[ generatorul de numere aleatoare cu valoarea seed.
void qsort(void *buf, size_t nr, size_t lung,int(*cmp)(const void *arg1, const void *arg2));
/* fisier header stdlib.h */
sorteaz[ ]n ordine cresc[toare tabloul buf[0],buf[1],…,buf[nr-1] folosind metoda QuickSort. Parametrul lung reprezint[ m[rimea ]n octe\i a fiec[rui element. Func\ia de comparare este *cmp =i trebuie s[ ]ntoarc[
o valoare<0 dac[ arg1<arg2o valoare=0 dac[ arg1=arg2o valoare>0 dac[ arg1>arg2
void bsearch(const void *cheie, const void *buf,size_t nr, size_t lung, int(*cmp)(const void *arg1, const void *arg2)); /* fisier header stdlib.h */
caut[ ]n tabloul ordonat buf[0],buf[1],…,buf[nr-1] ]ntorc`nd un pointer c[tre primul membru care corespunde cheii indicat[ de cheie, ]n caz de succes, sau NULL ]n caz contrar. Semnifica\ia parametrilor este cea descris[ la func\ia qsort().
264