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
-
Những ứng dụng chụp ảnh đẹp nhất trên iOS và Android
Hôm qua -
Các cách chuyển dữ liệu từ iPhone cũ sang iPhone mới
Hôm qua -
Cách xem kích thước (độ phân giải) của hình ảnh trên iPhone
Hôm qua -
Cách tạo kiểu chữ uốn cong trên Word
Hôm qua -
Các link nhập code Play Together
Hôm qua -
Hiển thị thông tin BIOS trên Windows 10 bằng Command Prompt
Hôm qua -
Cách sử dụng ADB và Fastboot trên Android
Hôm qua -
9 cách xuống dòng trong Excel dễ nhất
Hôm qua 8 -
Hướng dẫn cách chơi, lên đồ Krixi mùa S1 2023
Hôm qua -
8 lý do bạn nên học cách nói "KHÔNG" ngay từ bây giờ
Hôm qua