Constanta 16 biti 32 biti tipul de sir
səhifə 25/55 tarix 07.05.2018 ölçüsü 4,6 Mb. #50260
Constanta 16 biti 32 biti tipul de sir
=======================================================================
MAXPATH 80 256 path
MAXDRIVE 3 3 drive si [:]
MAXDIR 66 260 dir si [ \ ]
MAXFILE 9 256 name
MAXEXT 5 256 .ext inclusiv punctul
========================================================================
EXEMPLU: #include
#include
#include
main()
{
char *cale,*unitate,*director,*nume,*extensie;
cale="C:/Programe/prog1/Scrisoare.txt";
unitate="X: ";
director="directorul(fisierul) ";
nume="numele ";
extensie=".ext";
_splitpath(cale,unitate,director,nume,extensie);
printf("Calea de acces este: %s \n",cale);
printf("si este formata din urmatoarele elemente: \n");
printf("Unitatea de disc este: %s \n",unitate);
printf("directorul de arhivare este: %s \n",director);
printf("numele filei este: %s \n",nume);
printf("si este de tip: %s \n",extensie);
sleep(5);
}
Functia se poate utiliza impreuna cu _makepath() pentru a separa calea
de acces la fisierul curent in elemente componente ce vor fi utilizate la
constructia de noi cai de acces spre filele adaugate la fisier (se pot
scrie rutine automate care sa permita ulterior deschiderea automata a
filelor).Functia se poate utiliza si pentru sortarea filelor de un
anumit fel (cu aceeasi extensie,din acelasi subdirector etc.)
FUNCTIA mblen()
-determina lungimea unui caracter de tip multibyte.
SINTAXA GENERALA este: int mblen(const char *s,size_t n);
unde: s este caracterul multibyte(pointerul) iar n este numarul maxim
de bytes examinati pentru evaluarea caracterului.
Executia functiei este influentata de setarile pentru LC_CTYPE din fila
de antet (care contine functii cu informatii specifice pentru
fiecare limba sau tara Exemplu:unitati monetare,unitati de masura etc.)
-175- [ stdlib.h - mbtowc() ]
Functia returneaza zero pentru un caracter NULL,0 valoare pozitiva pt.un
caracter de tip multibyte sau -1 daca numarul n de bytes evaluati nu
contin nici un caracter valid de tip multibyte (contin date in format
neinterpretabil).Pentru caractere multibyte returneaza lungimea in bytes.
Functia determina lungimea si validitatea unui caracter de tip multibyte.
Versiunea Visual C++ include si functia _mbclen() care returneaza 1 sau
2 dupa cum caracterul de tip multibyte ocupa 1 sau 2 octeti.
EXEMPLU: #include
#include
#include
main()
{
char *text1="";
char *text2="abcde";
int x;
x=mblen(text1,10);
printf("lungimea caracterului din text1 este: %d \n",x);
x=mblen(text2,10);
printf("lungimea caracterului din text2 este: %d \n",x);
sleep(5);
}
Observati ca pentru un caracter NULL ,functia returneaza zero.
FUNCTIILE mbtowc() si wctomb()
-convertesc un caracter multibyte in caracter extins si viceversa
SINTAXA GENERALA este: int mbtowc(wchar_t *pwc,const char *s,sixe_t n);
si respectiv int wctomb(char *s,wchar_t wc)
In majoritatea aplicatiilor din C se utilizeaza caractere standardizate
de un singur byte(octet) care respecta standardul ANSII.Limbajul C++
accepta si caractere de tip multibyte care sunt caractere speciale ce
ocupa mai mult decat un byte(o suita de bytes) si care sunt utilizate
pentru reprezentarea unor caractere speciale (Exemplu: limba Japoneza
contine mai mult de 255 de caractere si utilizeaza setul de caractere
Kanji de tip multibyte).Un alt tip special de caractere sunt cele extinse
(wide characters) care sunt multilinguale si ocupa intotdeauna 2 bytes
(16 biti).Caracterele extinse formeaza un tip special de date denumit
wchar_t si sunt utilizate pentru reprezentarea unor simboluri care nu
sunt incluse in standardul ASCII (Exemple:unitati monetare,unitati de
masura,simboluri matematice sau grafice etc.).Caracterele extinse sunt
incluse in standardul denumit Unicode si pot fi transformate in caractere
de tip multibyte cu ajutorul unor functii speciale: mbstowcs,mbtowc,
wcstombs si wctomb.
Functia mbtowc()(multibyte to wide character) converteste un caracter de
tip multibyte intr-un caracter de tip wide,iar functia wctomb() (wide
chatacter to multibyte) converteste un caracter de tip wide intr-un
caracter de tip multibyte.
In definitii: wchar_t este tipul de data pentru caracterele wide, *s este
pointerul spre adresa caracterului iar size_t n este numarul de bytes ce
vor fi evaluati din sirul de la adresa pointata de s.
Daca sirul contine un caracter nenul,functia mbtowc() returneaza o valoare
-176- [stdlib.h -mbstowcs() si wcstombs() ]
pozitiva iar daca pointerul este orientat spre un sir nul,functia retur-
neaza zero.Daca sirul specificat contine doar caractere neinterpretabile
pe toata lungimea specificata prin size_t n,atunci functia returneaza -1.
Valoarea returnata nu poate fi mai mare decat MB_CUR_MAX si nici
decat size_t n(numarul maxim de bytes evaluati).
Valoarea returnata de functia wctomb este influentata de setarile pentru
LC_CTYPE din .Functia returneaza zero daca sirul rezultat in
urma conversiei este NULL sau o valoare pozitiva in caz ca in urma con-
versiei a rezultat un caracter multibyte(numarul de bytes pe care este
reprezentat.In cazul unui caracter neinterpretabil,functia returneaza -1.
Valoarea returnata nu poate fi mai mare decat MB_CUR_MAX(numarul maxim
de bytes utilizat pentru reprezentarea caracterelor multibyte).
EXEMPLU: #include
#include
#include
main()
{
int x;
char *multibit=" ";
wchar_t extins= L'M';
wchar_t *character=(wchar_t *)calloc(1,sizeof(wchar_t));
x=wctomb(multibit,extins);
printf("Caractere convertite: %u\n",x);
printf("Caracter multibyte rezultat: %x\n\n",multibit);
x=mbtowc(caracter,multibit,2);
printf("Bytes convertiti: %u\n",x);
printf("Caracter extins rezultat(adresa): %x\n\n",caracter);
sleep(7);
}
Functiile sunt utile atunci cand se lucreaza pe platforme comune sau in
retea cu date internationale sau cu marimi exprimate prin diferite sim-
boluri grafice si in cele care utilizeaza limba japoneza,coreeana etc.
Daca utilizati caractere multibyte este bine sa aveti rutine special des-
tinate pentru codificarea si respectiv decodificarea lor.
FUNCTIILE mbstowcs() si wcstombs()
-sunt similare cu mbtowc() si wctomb() dar opereaza cu mai multe caractere
simultan (converteste un sir de caractere multibyte la o arie de caractere
wide si reciproc)
SINTAXA GENERALA este:
size_t mbstowcs(wchar_t *pwcs,const char *s,size_t n);
si: size_t wcstombs(char *s,const wchar_t *pwcs,size_t n);
unde argumentele functiilor au aceeasi semnificatie ca pentru mbtowcs().
Functiile intrerup citirea daca intalnesc un caracter NULL sau un caracter
neinterpretabil,altfel evalueaza size_t n octeti.
Rezultatul returnat este influentat de setarile LC_CTYPE din si
poate fi -1 in cazul caracterelor neinterpretabile sau un numar pozitiv
atunci cand conversia s-a efectuat cu succes.
Functiile sunt utilizate pentru conversia unor simboluri reprezentate
prin siruri de caractere si sunt utile pentru evaluarea unor date preluate
de la o tara cu alte unitati de masura (monetare,metrice etc.).
-177- [ stdlib.h _searchenv() ]
EXEMPLU: #include
#include
#include
main()
{
int x;
char multibit=" xxx ";
wchar_t *extins= L"Hello!";
wchar_t *sir=(wchar_t *)calloc(1,sizeof(wchar_t));
x=wcstombs(multibit,extins,10);
printf("Caractere convertite: %u\n",x);
printf("Caracter multibyte rezultat: %x\n\n",multibit);
x=mbstowcs(sir,multibit,2);
printf("Bytes convertiti: %u\n",x);
printf("Caracter extins (adresa): %x\n",sir);
printf("Caracterul rezultat este: %s \n\n",sir);
sleep(7);
}
FUNCTIA _searchenv()
-cauta o fila utilizand calea de acces din mediul de memorie
SINTAXA GENERALA este:
char *_searchenv(const char *file,const char *varname,char *buf);
unde:
file -este pointerul spre numele filei cautate(cu extensie)
varname -este pointerul spre mediul de memorie utilizat
buf -este pointerul spre tamponul de memorie in care se va
arhiva calea de acces spre fila respectiva
Mediul de memorie utilizat pentru cautarea filei solicitate poate fi
orice variabila din mediul de memorie,inclusiv cele definite de catre
utilizator,care contine o lista de directoare sau de cai complete de
acces.Cele mai frecvent utilizate sunt PATH,LIB si INCLUDE,dar se pot
utiliza si cai de acces spre fisierele declarate de utilizator.
Functia va cauta fila initial in directorul curent si doar daca nu
o gaseste va trece si la caile de acces specificate prin *varname.Calea
de acces va fi copiata si arhivata in tamponul de memorie specificat prin
*buf.Daca functia nu gaseste calea de acces spre fila indicata calea de
acces returnata si arhivata in buf va contine un caracter NULL(un sir gol)
Tamponul de memorie buf,trebuie sa fie suficient de larg pentru a
cuprinde intreaga cale de acces (preferabil de lungimea _MAX_PATH),in caz
contrar,searchenv() va suprascrie datele in tampon,cu rezultate imprevi-
zibile.
In cazul in care fila cautata este in acelasi director cu directorul
curent,fila va fi gasita direct si imediat ,indiferent de variabila spe-
cificata pentru mediul de memorie.Daca fila este arhivata in alt director
decat cel curent (in alt fisier),atunci variabila specificata trebuie sa
contina calea de acces spre directorul(fisierul) respectiv.Este bine ca
numele filei cautate sa fie scris complet,inclusiv extensia si respectand
si notatia grafica a caracterelor (majuscule si minuscule),altfel riscati
ca functia sa identifice calea de acces chiat daca fila este prezenta in
directorul specificat iar calea de acces a fost specificata corect.
-178- [ stdlib.h - _strtold() ]
EXEMPLU: #include
#include
#include
main()
{
char tampon[_MAX_PATH];
char *mediu="PATH";
char *fila="bcc32.cfg";
printf("Calea de acces la fila bcc32 este: \n\n");
_searchenv(fila,mediu,tampon);
printf("%s",tampon);
sleep(5);
}
Variabilele PATH,LIB si INCLUDE pointeaza spre fisierele BIN,LIB si
INCLUDE din C++ care contin cel mai mare numar de file(inclusiv filele
de functii pentru preprocesor care sunt arhivate in INCLUDE).Se utili-
zeaza pentru a identifica automat accesul spre anumite file.
FUNCTIA _strtold()
-converteste un sir de caractere la un numar de tip long double
SINTAXA GENERALA este: long double _strtold(const char *s,char **endptr);
unde : s este sirul iar endptr este variabila de stop (pointerii)
Functia este similara cu strtod cu diferenta ca valorile reprezentabile
sunt cele pentru tipul long double (1,2E-4932 la 1,2E+4932)(fiecare numar
ocupa un spatiu de memorie cat o pagina intreaga de text).
Sintaxa si conditiile de executie sunt la fel ca pentru strtod()(vezi).
Sirul convertit trebuie sa respecte forma generala:
[spatii goale][semn][cifre][.][cifre][e sau E][semn][cifre]
*endptr se utilizeaza pentru a stoca ultimul caracter convertit din sir,
si se utilizeaza la nevoie in operatiile de depanare a programelor.
Functia returneaza valoarea numerica rezultata in formatul long double,
sau cel mai apropiat numar din domeniul reprezentabil (extremele) in caz
ca numarul rezultat este in afara domeniului.
EXEMPLU: #include
#include
#include
main()
{
char numar1[80]="13357E2353";
char numar2[80]="7935E775";
char *stop;
longdouble valoare,valoare1,valoare2;
valoare1=_strtold(numar1,&stop);
valoare2=_strtold(numar2,&stop);
valoare=valoare1/valoare2;
printf("textul este: %s / %s \n",numar1,numar2);
printf("rezultatul operatiei este: %LG \n",valoare);
sleep();
}
Se utilizeaza pentru numerele foarte mari (mai mari decat E+308 ).
-179-
CONSTANTE,TIPURI DE DATE SI VARIABILE GLOBALE (din stdlib.h)
div_t -tipul de data div_t este o structura utilizata pentru functia div()
si are sintaxa generala:
typedef struct { int quot;
int rem; } div_t;
unde quot salveaza catul iar rem salveaza restul impartirii
ldiv_t este similara(aceeasi sintaxa) dar opereaza cu numere de tip long
_doserrno (din ) este o variabila care arhiveaza erorile de
sistem dupa urmatorul cod: E2BIG(bad enviroment),EACCES(access denied),
EBADF(bad handle),EFAULT(reserved),EINVAL(bad data/bad function),EMFILE
(too many open),ENOENT(no such file or directort),ENOEXEC(bad format),
ENOMEM(Mcb destroyed/out of memory/bad block),EXDEV(bad drive/not same
device).Codurile sunt pentru erorile sistemului DOS si sunt mostenite din
UNIX impreuna cu variabila errno.Se utilizeaza impreuna cu errno sau cu
perror(indirect).
_environ este o arie de pointeri spre siruri de date.Se utilizeaza pentru
a accesa si modifica variabilele din mediul de memorie.Fiecare sir de
date are forma generala de tipul: envar=varvalue (unde envar este
numele variabilei de memorie iar varvalue este valoarea atribuita pentru
variabila respectiva Exemplu: PATH=C:\BC5\BIN\DATE ).Aria de date din
_environ poate fi accesata cu getenv() si cu putenv() (vezi functiile).
errno -este o variabila globala (definita in errno.h) utilizata de catre
perror() pentru a afisa un mesaj predefinit in caz de eroare de executie.
Uneori este echivalenta cu _doserrno iar in alte cazuri nu contine si
codurile de eroare ale sistemului DOS.
EXIT_FAILURE si EXIT SUCCESS sunt constante pentru definirea conditiei de
apelare a functiei exit() si specifica terminarea normala sau anormala a
programului (vezi exit() ).
_fmode -este o variabila globala (din fcntl.h) care determina daca o
fila va fi deschisa in modul text sau in mod binar.Poate lua valorile:
O_TEXT(valoarea implicita) si respectiv O_BINARY.Acelasi rezultat se
obtine utilizand literele t(text) sau b(binary).Se utilizeaza cu open().
NULL este o constanta compatibila cu orice tip de pointer cu exceptia
celor care pointeaza spre functii.Cand un pointer este NULL este garantat
ca acel pointer nu pointeaza nici o data definita in programul curent.
RAND_MAX-este constanta care arhiveaza valoarea maxima returnata de rand()
size_t -este tipul de data utilizat de sizeof() (definita in stddef.h)
_version este variabila globala care salveaza versiunea sistemului (numar)
wchar_t este tipul de data pentru caracterele extinse (wide character).
Orice caracter precedat de L este o constanta de tip wide character.
In C++ wchat_t este cuvant cheie.
-180- [ stdarg.h ]
BIBLIOTECA C -FILA ANTET stdarg.h (este la fel in C si in C++)
Defineste macrourile va_arg,va_end si va_start si respectiv tipul de
data va_list,utilizate pentru citirea argumentelor din lista de argumente
in cazul functiilor care accepta un numar variabil de argumente (Exemple:
in cazul functiilor vprintf(),vscanf() etc...).
MACROURILE va_arg,va_end si va_start
-se utilizeaza pentru a interpreta o lista de argumente variabile
SINTAXA GENERALA este:
void va_start(va_list ap,lastfix);
type va_arg(va_list ap,type);
void va_end(va_list ap);
unde:
lastfix -este parametrul ce precede primul parametru optional
ap -este pointerul spre lista de argumente variabile
type -tipul de argument ce va fi returnat de functie
Datele necesare pentru executia functiei se vor arhiva intr-o arie de
date de tip special declarata cu va_list (Exemplu: va_list date1)
va_start :-seteaza functia la primul argument ce va fi evaluat.Trebuie sa
fie declarata inainte de va_arg si va_end
va_arg :-evalueaza expresia pentru argumentul din lista curent.Nu se
poate utiliza pentru tipurile de date char,unsigned char si float
La prima utilizare,va_arg returneaza primul argument din lista,
apoi cel de al doilea si asa mai departe pana la epuizarea listei
va_end :-incheie executia functiei si determina revenirea normala la
nivelul de program de la care s-a apelat functia.va_end modifica
adresa pointerului ap de asa maniera incat functia nu va mai
putea fi reutilizata decat dupa o noua declaratie va_start.Nu se
va apela va_end decat dupa dupa ce va_arg a epuizat toate argu-
mentele din lista.
va_arg returneaza argumentul evaluat,va_start|va_end nu returneaza nimic
EXEMPLU: #include
#include
#include
int total=0;
int numar;
va_list aduna;
sum(char *mesaj,...)
{
va_start(aduna,mesaj);
while((numar=va_arg(aduna,int)) !=0)
{ total += numar; }
printf(mesaj,total);
va_end(aduna);
}
main()
{
sum("Suma numerelor ce urmeaza este: %d \n",11,35,5,13,2,36,0);
sleep(5);
}
Inlocuiti numerele din lista,sau adaugati altele si repetati exemplul.
-181- [ ]
BIBLIOTECA C -FILA ANTET stddef.h
In versiunea C contine doar definitii pentru : errno,NULL,ptrdiff_t si
size_t.In versiunea C++ se adauga si _threadid,wchar_t si functia offsetof
Se utilizeaza doar pentru functiile din alte file header(biblioteci) care
opereaza cu tipurile de date definite in stddef.
NULL este o constanta compatibila cu orice pointer care garanteaza ca
pointerul respectiv nu pointeaza nici o data din program.
errno este o variabila globala utilizata de functia perror pentru a
returna mesaje atunci cand anumite functii din program nu pot fi executate
Uneori este echivalenta cu _doserrno.In versiunea C++ este definita intr-o
biblioteca speciala denumita errno.h(impreuna cu _doserrno,_sys_errlist,
sys_nerr si error number definitions).Se utilizeaza pentru a seta mesaje
de eroare.
ptrdiff_t este un tip de data signed int care reprezinta rezultatul
obtinut prin operatia de scadere dintre doi pointeri(adresa).
size_t este un tip de data unsigned integer returnat de catre operatorul
sizeof.
_threadid este o variabila globala de tip long int care contine adresa
stivei aflata in executie.Este implementat sub forma de macro si poate fi
declarat doar dupa includerea filei .(unele variabile globale,
constante sau tipuri de date sunt definite in doua sau mai multe biblio-
teci.)
wchar_t este tipul de date pentru caracterele wide (vezi stdlib.h)
Dostları ilə paylaş: