Şiruri de caractere în C/C++

Şirul de caractere (C/C++)

O constantă de tip şir de caractere se declară între două caractere ” .

În memoria internă, o constantă de acest tip este reţinută sub forma unui vector de caractere.

Fiecare componentă a şirului (începând cu cea de indice 0) reţine codul ASCII al caracterului pe care îl memorează.

Convenţia este ca ultimul octet să reţină 0 (codul caracterului nul). Caracterul nul este memorat automat.

Trebuie rezervată lungimea şirului + 1 caracter char (+1 pentru caracterul nul).

Limbajul C/C++ permite iniţializarea unui tablou de caractere printr-o constantă şir, care include automat caracterul null.

Exemple iniţializare constante şir

char vect[11] = „calculator”;
char[] = „calculator”; (compilatorul face calculul numărului de octeţi necesari)
char vect[100] = „calculator”; (s-au rezervat mai mulţi octeţi decât era necesar)

Şirurile de caractere sunt de fapt tablouri de caractere, care au ca ultim element un terminator de şir, caracterul null.

Şiruri de caractere în C/C++

Exemple tablou/şir de caractere

char tc[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’}; //tablou de caractere
char sc[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’}; //şir de caractere cu elementele abcd

* Ultima iniţializare este echivalentă cu:
char sc[5] = „abcd”; //sau char sc[] = „abcd”;

char sc1[5] = „abcd”;
char s[10];

Exemple afişări

cout<<sc<<endln; //afişează abcd
cout<<tc<<endl; //eroare: tabloul de caractere nu conţine terminatorul de şir, deci nu poate fi afişat ca şir
cout<<s<<endl; //eroare: tablou neiniţializat
cout<<sc1[0]; //afişează primul caracter din şirul sc1
cout<<sc1[2]; //afişează al treilea element din şirul sc1

Exemplu atribuire de valori

sc1[1] = ‘K’; //elementului din şir de indice 1 i se atribuie valoarea ‘K’

Atribuirea de pointeri

Folosirea unui pointer la un şir de caractere iniţializat nu copiază şirul, ci are următorul efect:
se alocă memoria pentru şirul de caractere, inclusiv terminatorul nul la o adresă fixă de memorie;
se iniţializează spaţiul cu valorile constantelor caractere;
se iniţializează pointerul Psalut cu adresa spaţiului alocat.

char *Psalut = „Bună ziua!”; (pointerul este iniţializat să indice o constantă şir de caractere)

Asadar, în C nu există operaţia de atribuire de şiruri de caractere (sau în general de atribuire de tablouri), ci numai atribuire de pointeri. 

Atribuirea t=s nu copiază un tablou, pentru aceasta se foloseşte funcţia strcpy(t, s).



Şiruri de caractere în C/C++ publicat: 2023-03-07T08:11:26+02:00, actualizat: 2023-03-07T10:07:09+02:00 by Colegiu.info