Xử lý lỗi trong C
Các ngôn ngữ lập trình như ngôn ngữ C không cung cấp trực tiếp hỗ trợ việc xử lý lỗi nhưng bởi vì là ngôn ngữ chương trình hệ thống, nó cung cấp mức thấp nhất các dạng của giá trị trả về. Hầu hết các hàm của C và hàm trong Unix trả về giá trị 1 hoặc null trong bất kỳ trường hợp lỗi nào và thiết lập một mã lỗi errno cho biến toàn cục và chỉ dẫn có lỗi xảy ra trong quá trình gọi hàm. Bạn có thể tìm thấy nhiều mã lỗi khác nhau trong Header file có tên là <error.h>.
Vì thế một lập trình viên C có thể kiểm tra giá trị trả về và thực hiện hành động chính xác dựa vào giá trị trả về. Trong thực tế, lập trình viên nên thiết lập giá trị errno là 0 tại thời điểm khởi tạo chương trình. Một giá trị 0 thể hiện rằng không có lỗi trong chương trình.
Hàm perror() và strerror() và thông báo lỗi errno trong C
Ngôn ngữ chương trình C cung cấp các hàm perror() và strerror() có thể được sử dụng để hiển thị thông báo lỗi errno.
Hàm perror() hiển thị chuỗi mà bạn truyền cho nó, theo sau bởi dấu hai chấm, một khoẳng trắng và sau đó là đoạn văn bản mô tả giá trị lỗi hiện tại.
Hàm strerror() trả về con trỏ đến đoạn văn bản biểu diễn giá trị lỗi.
Cùng thử mô phỏng một điều kiện lỗi và thử mở một file không tồn tại. Tại đây tôi sử dụng cả hai hàm để chỉ ra cách sử dụng, nhưng bạn có thể sử dụng một hoặc nhiều cách để in ra giá trị lỗi của bạn. Điểm quan trọng thứ 2 cần ghi nhớ là bạn nên sử dụng stderr để đưa ra tất cả các lỗi.
#include <stdio.h> #include <errno.h> /* header file de su dung cac ham va hang can thiet*/ #include <string.h> extern int errno ; int main () { FILE * pf; int errnum; pf = fopen ("unexist.txt", "rb"); if (pf == NULL) { errnum = errno; fprintf(stderr, "Gia tri cua errno la: %d\n", errno); perror("Error duoc in boi ham perror"); fprintf(stderr, "Loi xuat hien khi mo file: %s\n", strerror( errnum )); } else { fclose (pf); } printf("\n===========================\n"); printf("QTM chuc cac ban hoc tot! \n"); return 0; }
Biên dịch và thực thi chương trình C trên để xem kết quả:
Lỗi chia cho số 0 trong C
Đây là một trong những lỗi rất phổ biến trong quá trình chia, bất cứ lập trình viên nào không kiểm tra điều kiện số bị chia là số 0 có thể gặp lỗi này trong quá trình thực hiện.
Đoạn code bên dưới sửa lỗi này bởi việc kiểm tra điều kiện nếu số bị chia là số 0 trước khi chia:
#include <stdio.h> #include <stdlib.h> main() { int sochia = 15; int sobichia = 0; int thuong; if( sobichia == 0){ fprintf(stderr, "Ban dang thuc hien phep chia cho so 0!!! Ket thuc chuong trinh ...\n"); exit(-1); } thuong = sochia / sobichia; fprintf(stderr, "Gia tri cua thuong la : %d\n", thuong ); printf("\n===========================\n"); printf("QTM chuc cac ban hoc tot! \n"); exit(0); }
Biên dịch và thực thi chương trình C trên sẽ cho kết quả sau:
Trạng thái thoát chương trình trong C
Trong thực tế để thoát chương trình với giá trị EXIT_SUCCESS trong trường hợp chương trình thoát ra sau khi một hoạt động thành công. Ở đây EXIT_SUCCESS là một macro được định nghĩa là giá trị 0.
Nếu bạn có điều kiện lỗi trong chương trình của bạn, bạn nên thoát ra với một trạng thái trả về là EXIT_FAILURE được định nghĩa có giá trị là -1. Bây giờ viết chương trình trên như sau:
#include <stdio.h> #include <stdlib.h> main() { int sochia = 36; int sobichia = 6; int thuong; if( sobichia == 0){ fprintf(stderr, "Ban dang thuc hien phep chia cho so 0!!! Ket thuc chuong trinh ...\n"); exit(EXIT_FAILURE); } thuong = sochia / sobichia; fprintf(stderr, "Gia tri cua thuong la: %d\n", thuong ); printf("\n===========================\n"); printf("QTM chuc cac ban hoc tot! \n"); exit(EXIT_SUCCESS); }
Theo Tutorialspoint
Bài trước: Ép kiểu trong C
Bài tiếp: Đệ quy trong C
Bạn nên đọc
Cũ vẫn chất
-
Tổng hợp cách tạo mật khẩu mạnh và quản lý mật khẩu an toàn nhất
Hôm qua -
Bitcoin là gì? Tại sao Bitcoin không phải là "tiền ảo"?
Hôm qua -
Cách xóa Header và Footer trong Word
Hôm qua -
Hướng dẫn chèn link vào nội dung trên Canva
Hôm qua -
Code Alo Chủ Tướng mới nhất 12/2024
Hôm qua -
8 cách mở bàn phím ảo trên Windows 10
Hôm qua -
Cách sửa lỗi âm thanh trên Windows 10, khắc phục lỗi âm thanh Win 10
Hôm qua -
15 cách chỉnh độ sáng màn hình máy tính, laptop
Hôm qua -
Cách kích hoạt Dynamic Lighting trên Windows 11
Hôm qua -
Hướng dẫn chơi Rung Cây vàng Trúng Cây vàng trên My Viettel
Hôm qua