Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 apostroafelorAcecastă 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 apostrofurilorAceastă 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 ''​-'':​
programare/laboratoare/lab07.1763110907.txt.gz · Last modified: 2025/11/14 11:01 by teodor.birleanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0