Limbajul c si C++ abc-doar


char *text3="Textul va fi suprascris in fila existenta"



Yüklə 4,6 Mb.
səhifə40/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   36   37   38   39   40   41   42   43   ...   55

char *text3="Textul va fi suprascris in fila existenta";

main()

{ handle=open("mesaj.mmm",O_RDWR);

write(handle,text1,36);

write(handle,text2,29);

write(handle,text3,42);

}
Fila antet io.h contine si declaratia pentru urmatoarele constante si

tipuri de date:

-structura ftime:-se utilizeaza pentru a arhiva ora si data

struct ftime { unsigned ft_tsec: 5;

unsigned ft_min: 6;

unsigned ft_hour: 5;

unsigned ft_day: 5;

unsigned ft_month:4;

unsigned ft_year: 7;

}

se utilizeaza pentru functiile getftime() si setftime()
-HANDLE_MAX -constanta care specifica numarul maxim de coduri handle
-SEEK_xxx -contine constantele pentru modurile fseek/lseek

se utilizeaza pentru a determina punctul de referinta fata de care se va

face operatiunea seek (de cautare in fila).Poate lua urmatoarele valori:

SEEK_SET 0 Cautarea incepe de la inceputul filei

SEEK_CUR 1 Cautarea incepe de la pozitia curenta

SEEK_END 2 Cautarea incepe de la sfarsitul filei
In versiunea C++,functiile _chmod(),_close(),_creat(),_open() si_read()

sunt inlocuite prin:_rtl_chmod(),_rtl_close(),_rtl_creat(),_rtl_open() si

_rtl_read().In plus,fila io.h C++ contine si urmatoarele functii:looking()

_get_osfhandle(),mktemp(),open_osfhandle(),_pipe(),remove(),rename() si

unmask().Aceste functii nu sunt absolut esentiale,sau au fost descrise

impreuna cu alte file header().Pentru informatii suplimentare,consultati

manualul Help al versiunii de care dispuneti.

Functiile din fila header io.h au o importanta deosebita,deoarece permit

arhivarea datelor pentru o perioada nedeterminata de timp.Datele sunt

arhivate in file deschise la nivel inferior de procesare (fara conversii)

si ocupa un spatiu minimal de memorie.Apelarea acestor functii,trebuie sa

se faca cu maximum de atentie,deoarece se pot deschide,suprascrie sau se

pot sterge integral file care contin date esentiale.Pentru maximum de

siguranta,este bine ca filele cu date importante sa fie arhivate cu atri-

butul read-only,atunci cand nu se mai opereaza asupra lor.


-294- [ string.h-memccpy() si memchr() ]

BIBLIOTECA C fila antet

-contine declaratia unui grup de functii ce opereaza asupra sirurilor de

date,sau asupra spatiului de memorie necesar pentru manipularea sirurilor.

FUNCTIA memccpy()

-copiaza un bloc de n bytes,dintr-un sir in altul

SINTAXA GENERALA este:

void *memccpy(void *dest,const void *sursa,int c,size_t n); sau:

void far *far _fmemccpy(void far *dest,const far *sursa,int c,size_t n);

Functia copiaza numarul n de bytes,din sirul sursa in sirul destinatie.

size_t este un tip de data care returneaza o valoare de tip unsigned int

pentru operatorul sizeof (practic numere intregi pozitive <32000 )

Copierea datelor din sirul sursa in cel de destinatie se face pana la

prima aparitie a caracterului specificat prin 'int c' sau pana cand se

copiaza intregul bloc de n bytes.

Functia memccpy() este implementata si sub UNIX V iar _fmemccpy() in C++.

Functia returneaza un pointer catre primul caracter(byte) ce urmeaza in

sirul sursa dupa caracterul specificat prin 'int c' in caz ca acesta a

fost identificat si copiat in sirul de destinatie,iar in caz contrar re-

turneaza NULL.

EXEMPLU: #include

#include

char *sursa="abcdefghijklmnopqrstuvxyz";

char destinatie[40];

char *pointer;

main()

{ pointer=memccpy(destinatie,sursa,'r',22);

printf("Sirul destinatie este: %s \n",destinatie);

printf("Adresa pointerului este: %X \n",pointer);

printf("Apasati orice tasta ! \n");

getch();

}
FUNCTIA memchr()

-cauta un caracter intr-un sir

SINTAXA GENERALA este: void *memchr(const void *s,int c,size_t n); sau:

void far * far _fmemchr(const void far *s,int c,size_t n);

Pentru diferite versiuni,exista variante de implementare in ce priveste

tipul (void si/sau const) pentru sirul sursa.

EXEMPLE: const void *memchr(const void *s,int c,size_t n);

void *memchr(void *s,int c,size_t n);

const void far * far _fmemchr(const void far *s,int c,size_t n);

void far * far _fmemchr(void far *s,int c,size_t n);

void *memchr(const void *s,int c,size_t n);

void far * far _fmemchr(const void far *s,int c,size_t n);

Functia cauta n bytes din sirul sursa,pentru a identifica un caracter egal

cu cel specificat prin 'int c'.Caracterul va fi cautat in sirul spre care

este orientat pointerul specificat prin *s.

Functia returneaza un pointer spre adresa caracterului cautat din sirul

sursa,sau in caz ca acesta nu a fost identificat,returneaza NULL.

Daca se utilizeaza versiunea intrinseca a functiei,aceasta va returna NULL

si pentru n=0.


-295- [ string.h - memcmp() ]

EXEMPLU: #include

#include

char *sursa="Text oarecare in sirul sursa w";

int x;

char *pozitie;

main()

{ for (x=1;x<25;x++)

{ pozitie=memchr(sursa,'u',x);

if (pozitie)

printf("Caracterul u este in pozitia %d \n",pozitie-sursa+1);

else

printf("Caracterul u nu a fost gasit in %d caractere \n",x);}

printf("Apasati orice tasta !");

getch();

}
FUNCTIA memcmp()

-compara doua siruri (blocuri de date)

SINTAXA GENERALA este:

int memcmp(const void *s1,const void *s2,size_t n); sau: [ C ]

int far _fmemcmp(const void far *s1,const void far *s2,size_t n); [C++]

Functia compara primii n bytes din ambele campuri(siruri) de date s1 si s2

sub forma de unsigned chars (date de tip unsigned char).

Functia este implementata si pentru UNIX V.

Deoarece datele sunt comparate sub forma de unsigned char,rezultatul re-

turnat de functie poate fi un numar int care este:

< 0 daca s1 este mai mic decat s2

= 0 daca s1 este identic cu s2

> 0 daca s1 este mai mare decat s2

EXEMPLU: #include

#include stdio.h>

#include

char *sir1="12377"

char *sir2="1238456";

int valoare,x;

main()

{ for (x=1;x<7;x++)

{ valoare=memcmp(sir1,sir2,x);

printf("%s / %s \n",sir1,sir2,x);

printf("cifre citite: %d valoare=%d \n",x,valoare);

if (valoare >0)

printf("Primul sir este mai mare! \n");

if (valoare <0)

printf("Al doilea sir este mai mare !\n");

if (valoare==0)

printf("sirurile sunt perfect egale ! \n");

}

getch();

}

Functia poate fi utilizata pentru a compara denumiri,siruri,fragmente de

text,adrese de memorie sau pointeri etc.


-296- [ string.h -memcpy() si memicmp() ]

EXEMPLU: #include

#include

#include

char *sir1="Exemplu de sir de date !";

char destinatie[40];

void *pointer1;

void *pointer2;

int valoare,x;

main()

{ pointer1=memccpy(destinatie,sir1,'x',25);

pointer2=memccpy(destinatie,sir1,'d',25);

valoare=memcmp(pointer1,pointer2,20);

printf("%s / %s \n",pointer1,pointer2);

printf("valoare=%d \n",valoare);

if (valoare > 0)

printf("primul pointer este mai mic ! \n");

if (valoare < 0)

printf("al doilea pointer este mai mic ! \n");

if (valoare ==0)

printf("pointerii sunt egali \n");

getch();

}
FUNCTIA memcpy()

-copiaza date dintr-un sir in altul

SINTAXA GENERALA este: void *memcpy(void *dest,const void *src,sixe_t n);

Functia copiaza un bloc de n bytes din sirul sursa in cel de destinatie.

Este similara cu memccpy(),cu deosebirea ca nu include si un caracter

tinta la care sa se termine copierea blocului de date ci copiaza strict

un numar de n bytes(cel specificat prin size_t,adica unsigned int).

Functia returneaza sirul coipat (cel de destinatie).

EXEMPLU: #include

#include

char *sir1="Sirul sursa pentru datele solicitate !";

char destinatie[40];

main()

{ memcpy(destinatie,sir1,11);

printf("datele copiate sunt: %s \n",destinatie);

printf("*** apasati orice tasta *** \n");

getch();

}
FUNCTIA memicmp()

-compara doua siruri (facand abstractie de majuscule si minuscule)

SINTAXA GENERALA este:

int memicmp(const void *s1,const void *s2,size_t n);

Functia este identica cu memcmp(),dar nu face deosebire intre caracterele

scrise cu majuscule si cele scrise cu minuscule (EXEMPLU: M si m).

Functia returneaza o valoare de tip int,negativa daca primul sir este mai

mic decat al doilea,pozitiva daca este mai mare si egala cu 0 daca cele

doua siruri sunt strict egale. EXEMPLE: vezi memcmp()


-297- [ memmove(),memset() si movedata() ]

FUNCTIA memmove()

-copiaza date dintr-un sir in altul (este similara cu memcpy)

SINTAXA GENERALA este: void *memmove(void *dest,const void *src,size_t n);

Functia copiaza un bloc de n date din sirul sursa in cel de destinatie.

Functia returneaza sirul copiat.

EXEMPLU: #include

#include

char *sir1="Abx12345678910987654321com";

char *destinatie[40];

main()

{ memmove(destinatie,sir,23);

printf("datele copiate sunt: %s \n",destinatei);

printf("*** apasati orice tasta *** \n");

getch();

}
FUNCTIA memset()

-seteaza n bytes din sirul specificat la valoarea specificata

SINTAXA GENERALA este: void *memset(void *s,int c,size_t n); sau:

void far * far _fmemset(void far *s,int c,size_t n); [C++]

Functia seteaza primii n bytes din sirul n la valoarea specificata prin

'int c'.

Functia returneaza sirul impreuna cu modificarile efectuate.

EXEMPLU: #include

#include

char *sursa="Sirul de date asupra caruia operam";

main()

{ memset(sursa,'*',14);

printf("Sirul modificat arata astfel: %s \n",sursa);

printf("...apasati orice tasta...\n");

getch()

}

Functia se poate utiliza pentru a corecta un text,pentru a modifica sau

adauga date,pentru a redenumi o fila sau un director etc.
FUNCTIA movedata()

-copiaza date de la o adresa sursa la o adresa de destinatie (adresa DOS)

SINTAXA GENERALA este:

void movedata(unsigned sseg,unsigned soff,unsigned dseg,unsigned doff,

size_t n);

Functia copiaza n bytes de la adresa sursa sseg care se termina la

offsetul soff la adresa dseg care se termina la offsetul doff.Ambele

adrese(atat cea sursa cat si cea de destinatie) sunt adresele DOS ale

memoriei,delimitate prin cele doua extreme (seg=inceputul adresei de

memorie si off=sfarsitul adresei de memorie).

Functia nu returneaza nici o valaore.

Functia reprezinta o modalitate alternativa de a transfera datele in

cadrul memoriei,de la o adresa la alta fara a utiliza alte variabile sau

tampoane de memorie etc.Functia permite si rescrierea memoriei DOS.Atentie

insa sa nu rescrieti din greseala adrese cu date importante,sau esentiale

pentru sistem(daca nu intelegeti reprezentarea memoriei,evitati functia).


-298- [ string.h - stpcpy() ]

EXEMPLU: #include

#include

#include

char *s[20];

char *d[20];

int x,x,z,w;

main()

{ s[1]="Sir de date";

d[1]="abc";

printf("adresa pentru s[1]=%d \n",&s[1]);

printf("adresa pentru d[1]=%d \n",&d[1]);

x=FP_SEG(s);

y=FP_OFF(s);

z=FP_SEG(d);

w=FP_OFF(d);

printf("memoria alocata pentru s[20]=%d - %d \n",x,y);

printf("memoria alocata pentru d[20]=%d - %d \n",z,w);

movedata(x,y,z,w,3);

printf("datele transferate sunt: %s \n",d[1]);

getch();

}

Pentru determinarea adreselor de memorie (segment si offset) am utilizat

functiile FP_SEG si FP_OFF din .Deasemenea,trebuie tinut cont de

faptul ca primul byte din memoria alocata fiecarei arii de memorie este

NULL iar cel de al doilea este rezervat pentru gestionarea spatiului.
FUNCTIA stpcpy()

-copiaza un sir in interiorul altui sir

SINTAXA GENERALA este: char *stpcpy(char *dest,const char *src);

Functia copiaza sirul sursa(src) in sirul de destinatie(dest) pana cand

ajunge la caracterul NULL terminal din sirul sursa.

Functia returneaza sirul rezultat (dest+strlen(src) )

EXEMPLU: #include

#include

char *sursa="TEXT PENTRU REPLICAT";

char *dest1=".......................";

char *dest2="...xxx";

main()

{ printf("Sirurile initiale sunt: \n");

printf("%s \n %s \n",dest1,dest2);

stpcpy(dest1,sursa);

stpcpy(dest2,sursa);

printf("Sirurile transformate sunt: \n");

printf("%s \n %s \n",dest1,dest2);

printf(" Apasati orice tasta \n");

getch();

}

Functia este foarte utila,atunci cand doriti sa corectati un text sau

mai multe date,din structuri de date de tip caracter(gen tabele).Daca

acelasi text trebuie introdus intr-un numar mare de siruri,se pot alcatui

algoritmi elementari.


-299- [string.h-strcat() si strchr() ]

FUNCTIA strcat() si _fstrcat()

-concateneaza doua siruri

SINTAXA GENERALA este: char *strcat(char *dest,const char *src);

sau char far * far _fstrcat(char far *dest,const char far *src); [C++]

Functia concateneaza (adauga) sirul sursa la sfarsitul sirului destinatie.

Sirul rezultat va avea lungimea egala cu suma celor doua siruri,respectiv:

strlen(dest)+(strlen(src).

Functia returneaza un pointer spre cele doua siruri concatenate(spre sirul

rezultat in urma concatenarii).

EXEMPLU: #include

#include

char *sursa1="Numele ";

char *sursa2="Prenumele ";

char *sursa3="Adresa ";

char *sursa4="Telefon ";

char *sir1="Date personale: ";

main()

{ printf("\nSirul final (concatenat) este: \n\n");

strcat(sir1,sursa1);

strcat(sir1,sursa2);

strcat(sir1,sursa3);

strcat(sir1.sursa4);

printf("%s \n\n",sir1);

printf("...apasati orice tasta...");

getch(); }
FUNCTIA strchr() si _fstrchr()

-cauta prima aparitie a unui caracter,intr-un sir

SINTAXA GENERALA este: char *strchr(const char *s,int c);

sau char far * far _fstrchr(char far *s,int c); [C++]

Functia scaneaza sirul spre care pointeaza *s in cautarea caracterului

specificat prin int c,inclusiv caracterul null-terminator.(Exemplu:

strchr(sir1,0) va cauta primul caracter zero din sirul sir1 iar in caz ca

acesta lipseste din sir,va returna pozitia caracterului terminator de sir.

Functia returneaza un pointer catre primul caracter identic cu cel cautat,

sau daca sirul nu contine caracterul cautat,functia returneaza NULL.

EXEMPLU: #include

#include

char *sir1="Acesta este sirul de referinta !";

char *adresa,x;

main()

{ printf("Introduceti caracterul cautat: \n");

scanf("%s",&x);

adresa=strchr(sir1,x);

if (adresa)

printf("Caracterul %c este in pozitia: %d \n",x,adresa-sir1+1);

else

printf("Caracterul %c nu a fost gasit in sir1 !\n",x);

printf("...apasati orice tasta...");

getch();

}


-300- [string.h-strcmp() si strcmpi() ]

FUNCTIA strcmp()

-compara doua siruri

SINTAXA GENERALA este: int strcmp(const char *s1,const char *s2);

Functia compara cele doua siruri de caractere spre care sunt orientati

cai doi pointeri *s1 si *s2.Comparatia este de tip unsigned int(codul nu-

meric ASCII),incepand cu primul caracter din fiecare sir si apoi conti-

nuand cu urmatoarele,pana cand apare prima diferenta,sau pana la epuizarea

sirurilor.In functie de rezultatul comparatiei,rezultatul returnat este:

<0 daca s1 este mai mic decat s2

==0 daca sirurile sunt identice

>0 daca s1 este mai mare decat s2

EXEMPLU: #include

#include

char *sir1;

char *sir2;

int x=5;

{ printf("Introduceti parola de acces: \n");

scanf("%s",&sir1);

printf("Introduceti confirmarea parolei: \n");

scanf("%s",&sir2);

x=strcmp(sir1,sir2);

if (x==0)

printf("Parola este corecta ! \n");

else

printf("Parola este incorecta ! \n");

getch();

}
FUNCTIA strcmpi()

-compara doua siruri,fara a deosebi majusculele de minuscule

SINTAXA GENERALA este: int strcmpi(const char *s1,const char *s2);

Functia compara cele doua siruri(la fel ca strcmp) dar fara a tine cont de

majuscule sau minuscule pentru caracterele de tip text.Functia este imple-

mentata sub forma de macrou prin translatarea apelului la functia strcmp()

dar este definita tot in fila header string.h(care trebuie preprocesata).

Aceasta functie asigura compatibilitatea dintre versiuni diferite de C.

Functia returneaza: <0 daca s1 este mai mic decat s2

==0 daca s1 este identic cu s2

>0 daca s1 este mai mare decat s2

EXEMPLU: #include

#include

char *text1="AbCdEfG";

char *text2="aBcDeFg";

int x,y;

main()

{ x=strcmp(text1,text2);

y=strcmpi(text1,text2);

printf("Functia strcmp returneaza: %d \n",x);

printf("iar functia strcmpi returneaza: %d \n\n",y);

printf(" ...apasati orice tasta...\n");

getch(); }


-301- [string.h-strcpy() si strcspn() ]

FUNCTIA strcpy()

-copiaza un sir in interiorul altui sir(suprascrie sirul)

SINTAXA GENERALA este: char *strcpy(char *dest,const char *src);

Functia copiaza sirul sursa in sirul de destinatie,incepand cu primul

caracter si pana la caracterul NULL terminal din sirul sursa(suprascrie

sirul de destinatie).

Functia returneaza sirul de destinatie (modificat).

EXEMPLU: #include

#include

char *sursa="TEXTUL CARE VA FI COPIAT";

char *destinatie="textul initial";

main()

{ printf("\nSirul initial este: %s \n",destinatie);

strcpy(destinatie,sursa);

printf("Sirul rezultat dupa copiere este: %s \n",destinatie);

printf("Observati ca strcpy suprascrie datele ! \n\n");

printf("...apasati oirice tasta...\n");

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   36   37   38   39   40   41   42   43   ...   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