🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Gestione Errori in C

Codegrind Team•Jul 12 2024

Ecco degli esercizi semplici con soluzione per praticare la gestione degli errori in C.

Esercizio 1: Apertura di un File

Gestire l'errore durante l'apertura di un file.
#include <stdio.h>

int main() {
    FILE *file = fopen("testo.txt", "r");
    if (file == NULL) {
        perror("Errore nell'apertura del file");
        return 1;
    }
    fclose(file);
    return 0;
}

Esercizio 2: Allocazione di Memoria Dinamica

Gestire l'errore durante l'allocazione di memoria dinamica.
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int *)malloc(sizeof(int) * 10);
    if (ptr == NULL) {
        perror("Errore di allocazione della memoria");
        return 1;
    }
    free(ptr);
    return 0;
}

Esercizio 3: Divisione per Zero

Gestire l'errore di divisione per zero.
#include <stdio.h>

int main() {
    int a = 10, b = 0;
    if (b == 0) {
        fprintf(stderr, "Errore: divisione per zero\n");
        return 1;
    }
    int risultato = a / b;
    printf("Risultato: %d\n", risultato);
    return 0;
}

Esercizio 4: Accesso a un Elemento di un Array fuori dai Limiti

Gestire l'errore di accesso a un elemento di un array fuori dai limiti.
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int indice = 10;
    if (indice < 0 || indice >= 5) {
        fprintf(stderr, "Errore: indice fuori dai limiti\n");
        return 1;
    }
    printf("Elemento: %d\n", arr[indice]);
    return 0;
}

Esercizio 5: Conversione di una Stringa in Numero

Gestire l'errore durante la conversione di una stringa in numero.
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *str = "123abc";
    char *endptr;
    long val = strtol(str, &endptr, 10);

    if (*endptr != '\0') {
        fprintf(stderr, "Errore: conversione non riuscita, carattere non numerico trovato: %c\n", *endptr);
        return 1;
    }

    printf("Numero convertito: %ld\n", val);
    return 0;
}

Esercizio 6: Lettura di un File Binario

Gestire l'errore durante la lettura di un file binario.
#include <stdio.h>

typedef struct {
    int id;
    char nome[50];
} Record;

int main() {
    FILE *file = fopen("dati.bin", "rb");
    if (file == NULL) {
        perror("Errore nell'apertura del file");
        return 1;
    }

    Record rec;
    size_t result = fread(&rec, sizeof(Record), 1, file);
    if (result != 1) {
        if (feof(file)) {
            fprintf(stderr, "Errore: fine del file raggiunta inaspettatamente\n");
        } else {
            perror("Errore nella lettura del file");
        }
        fclose(file);
        return 1;
    }

    printf("ID: %d, Nome: %s\n", rec.id, rec.nome);
    fclose(file);
    return 0;
}

Esercizio 7: Apertura di un Socket

Gestire l'errore durante l'apertura di un socket.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        perror("Errore nell'apertura del socket");
        return 1;
    }

    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8080);
    if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
        perror("Errore nella conversione dell'indirizzo IP");
        close(sockfd);
        return 1;
    }

    if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Errore nella connessione al server");
        close(sockfd);
        return 1;
    }

    printf("Connessione riuscita\n");
    close(sockfd);
    return 0;
}

Esercizio 8: Chiusura di un File

Gestire l'errore durante la chiusura di un file.
#include <stdio.h>

int main() {
    FILE *file = fopen("testo.txt", "r");
    if (file == NULL) {
        perror("Errore nell'apertura del file");
        return 1;
    }

    if (fclose(file) != 0) {
        perror("Errore nella chiusura del file");
        return 1;
    }

    printf("File chiuso correttamente\n");
    return 0;
}