Curs 5 - Prelucrarea Șirurilor, Structuri, Fisiere și Parametrii Liniei de Comandă în C

Acest curs abordează manipularea șirurilor de caractere, utilizarea structurilor și uniunilor, operațiile cu fișiere și aspecte avansate ale limbajului C.

1. Prelucrarea Șirurilor de Caractere

Șirurile de caractere în C sunt reprezentate prin tablouri de caractere terminate cu caracterul '\0'.

a) Declarația și Inițializarea unui Șir

#include <stdio.h>

int main() {
    char sir1[] = "Salut";
    char sir2[10] = "C";
    printf("%s %s\n", sir1, sir2);
    return 0;
}

b) Funcții pentru Manipularea Șirurilor

#include <stdio.h>
#include <string.h>

int main() {
    char s1[20] = "Hello";
    char s2[] = " World";
    strcat(s1, s2); // Concatenare
    printf("%s\n", s1);
    printf("Lungimea sirului: %lu\n", strlen(s1)); // Lungime
    return 0;
}

2. Structuri și Uniuni

Structurile și uniunile sunt utilizate pentru a grupa mai multe variabile sub un singur nume.

a) Definirea unei Structuri

#include <stdio.h>

struct Student {
    char nume[50];
    int varsta;
};

int main() {
    struct Student s = {"Alex", 21};
    printf("Student: %s, Varsta: %d\n", s.nume, s.varsta);
    return 0;
}

b) Uniuni

Uniunile sunt similare cu structurile, dar toate variabilele ocupă aceeași zonă de memorie.

#include <stdio.h>

union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data d;
    d.i = 10;
    printf("Valoare int: %d\n", d.i);
    d.f = 5.5;
    printf("Valoare float: %f\n", d.f);
    return 0;
}

3. Operații cu Fișiere

Fișierele pot fi accesate în C folosind `fopen`, `fprintf`, `fscanf`, `fclose`.

a) Scrierea într-un Fișier

#include <stdio.h>

int main() {
    FILE *f = fopen("test.txt", "w");
    fprintf(f, "Text salvat in fisier\n");
    fclose(f);
    return 0;
}

b) Citirea dintr-un Fișier

#include <stdio.h>

int main() {
    FILE *f = fopen("test.txt", "r");
    char buffer[100];
    fgets(buffer, 100, f);
    printf("Citit: %s\n", buffer);
    fclose(f);
    return 0;
}

4. Parametrii Liniei de Comandă

În C, un program poate primi argumente prin linia de comandă.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Numar argumente: %d\n", argc);
    for (int i = 0; i < argc; i++) {
        printf("Arg %d: %s\n", i, argv[i]);
    }
    return 0;
}

5. Preprocesorul

Preprocesorul C este responsabil pentru interpretarea directivelor `#define`, `#include` și altele.

#include <stdio.h>
#define PI 3.14159

int main() {
    printf("Valoare PI: %f\n", PI);
    return 0;
}

6. Funcții cu Număr Variabil de Parametri

Limbajul C permite definirea funcțiilor care pot accepta un număr variabil de argumente folosind `stdarg.h`.

#include <stdio.h>
#include <stdarg.h>

void afiseaza(int n, ...) {
    va_list args;
    va_start(args, n);
    for (int i = 0; i < n; i++) {
        printf("%d ", va_arg(args, int));
    }
    va_end(args);
    printf("\n");
}

int main() {
    afiseaza(3, 10, 20, 30);
    return 0;
}

Resurse suplimentare: