Şiruri de caractere în 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 rezervate lungimea_şirului+1 caractere 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

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++

Exemplu

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];
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
sc1[1] = ‘K’; //elementului din şir de indice 1 i se atribuie valoarea ‘K’

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: 2018-02-25T17:11:26+00:00, actualizat: 2018-02-25T17:25:20+00:00 by Colegiu.info