Limbajul c si C++ abc-doar


Constanta 16 biti 32 biti tipul de sir



Yüklə 4,6 Mb.
səhifə25/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   21   22   23   24   25   26   27   28   ...   55

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)
Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   21   22   23   24   25   26   27   28   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin