Ş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.
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).