📢 Nuovo Corso Bootstrap Completo disponibile!

Esercizi Gestione Errori in C

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;
}