This shows you the differences between two versions of the page.
|
programare:laboratoare:lab07 [2025/10/15 18:18] darius.neatu |
programare:laboratoare:lab07 [2025/11/18 11:49] (current) cosmin_stefan.popa |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| - | **Resposabili:****Responsabili:** | + | **Resposabili**: |
| * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip (2016-2020)]] | * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip (2016-2020)]] | ||
| + | * [[teodor.matei.birleanu@gmail.com|Bîrleanu Teodor Matei (2025 - prezent)]] | ||
| * [[neatudarius@gmail.com|Darius Neațu (2019-2020)]] | * [[neatudarius@gmail.com|Darius Neațu (2019-2020)]] | ||
| * [[emil.racec@gmail.com|Emil Racec (2012)]] | * [[emil.racec@gmail.com|Emil Racec (2012)]] | ||
| Line 23: | 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 45: | 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 ''-'': | ||
| Line 488: | Line 489: | ||
| sir | sir | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | ==== Exerciții ==== | ||
| + | Exercițiile pentru laborator se găsesc pe [[https://acs-pclp.github.io/laboratoare/07 | PCLP Laborator07: Prelucrarea şirurilor de caractere. Funcţii. Aplicaţii]]. | ||
| + | |||
| ==== Referinţe ==== | ==== Referinţe ==== | ||