This shows you the differences between two versions of the page.
|
programare:laboratoare:lab07 [2025/11/14 11:01] teodor.birleanu [PCLP Laborator07: Prelucrarea şirurilor de caractere. Funcţii. Aplicaţii] |
programare:laboratoare:lab07 [2025/11/18 11:49] (current) cosmin_stefan.popa |
||
|---|---|---|---|
| Line 24: | Line 24: | ||
| === Şiruri de caractere === | === Şiruri de caractere === | ||
| - | Un **caracter** se declară în C de forma: ''char a=%%'a'%%''; Pentru inițializarea lui, se observă că am pus un caracter între apostroafe. | + | Un **caracter** se declară în C de forma: ''char a=%%'a'%%''; Pentru inițializarea lui, se observă că am pus un caracter între apostrofuri. |
| Un **şir de caractere** presupune practic un vector de caractere, terminat prin caracterul ''\0''. | Un **şir de caractere** presupune practic un vector de caractere, terminat prin caracterul ''\0''. | ||
| - | Compilatorul folosește în mod implicit această reprezentare, astfel încât cea mai simplă declarație este ''char c[]="cuvant"''; Observăm aici folosirea ghilimelelor în locul apostroafelor. Acecastă instrucțiune va aloca un spațiu de ''7'' octeți pe care va reprezenta șirul de caractere 'cuvant' (care are ''6'' caractere). | + | Compilatorul folosește în mod implicit această reprezentare, astfel încât cea mai simplă declarație este ''char c[]="cuvant"''; Observăm aici folosirea ghilimelelor în locul apostrofurilor. Această instrucțiune va aloca un spațiu de ''7'' octeți pe care va reprezenta șirul de caractere 'cuvant' (care are ''6'' caractere). |
| Dacă dorim să alocăm un spațiu de memorie mai mare (pentru a putea folosi variabila pentru a stoca șiruri de caractere mai lungi), putem folosi o declarație de tipul ''char c[10] = "cuvant";''. Astfel am alocat spațiu suficient pentru un șir de ''9'' caractere. | Dacă dorim să alocăm un spațiu de memorie mai mare (pentru a putea folosi variabila pentru a stoca șiruri de caractere mai lungi), putem folosi o declarație de tipul ''char c[10] = "cuvant";''. Astfel am alocat spațiu suficient pentru un șir de ''9'' caractere. | ||
| Line 46: | Line 46: | ||
| Diferenţa majoră dintre între ele este însa că primele două declaraţii vor aloca 5 pozitii în memorie, pe când ultima nu va aloca nici o zona de memorie, necesitând sa fie ulterior alocată, folosind funcţiile de alocare dinamică (''malloc(), calloc(), realloc()''), prezentate în laboratorul anterior. | Diferenţa majoră dintre între ele este însa că primele două declaraţii vor aloca 5 pozitii în memorie, pe când ultima nu va aloca nici o zona de memorie, necesitând sa fie ulterior alocată, folosind funcţiile de alocare dinamică (''malloc(), calloc(), realloc()''), prezentate în laboratorul anterior. | ||
| - | Între prima și a 2-a declarație, diferența este mai subtilă și constră în faptul că declarația ''char *b="unsir"'' va determina compilatorul să plaseze șirul respectiv într-o zonă de memorie asupra căreia nu avem drepturi de scriere, deci orice încercare de a modifica acel șir - pe Linux - va genera, cel mai probabil, o eroare de tipul ''segmentation fault''. | + | Între prima și a 2-a declarație, diferența este mai subtilă și constă în faptul că declarația ''char *b="unsir"'' va determina compilatorul să plaseze șirul respectiv într-o zonă de memorie asupra căreia nu avem drepturi de scriere, deci orice încercare de a modifica acel șir - pe Linux - va genera, cel mai probabil, o eroare de tipul ''segmentation fault''. |
| Un mic exemplu de citire a unui şir, caracter cu caracter pana la întâlnirea caracterului ''-'': | Un mic exemplu de citire a unui şir, caracter cu caracter pana la întâlnirea caracterului ''-'': | ||