2013-07-31 29 views
9

Theo truyền thống, đó là - nói đúng - một lỗi khi chuyển một số signed char đến các vị từ ctype.h vì chúng chỉ được xác định từ -1 đến 255, vì vậy -128 đến -2 có thể kết thúc bằng việc đọc ngoài giới hạn mảng.Liệu ctype.h vẫn yêu cầu char chưa ký?

Điều này đã từng được khắc phục hay bạn vẫn nói đúng cách phải sử dụng unsigned char để tránh hành vi không xác định trong các phiên bản hiện đại của C?

+0

Các chương trình hiện đại chỉ tăng cơ hội đối đầu với các ký tự trong phạm vi 128-255, sẽ bị hiểu nhầm là âm nếu được xem là ký tự đã ký, vì vậy câu trả lời là “nhiều hơn bao giờ hết”. –

Trả lời

11

bạn vẫn nói đúng là phải sử dụng ký tự chưa ký để tránh hành vi không xác định trong các phiên bản hiện đại của C?

Vâng, từ C11 draft standard phần 7.4xử lý nhân vật < ctype.h> đoạn nói (tôi nhấn mạnh):

Tiêu đề tuyên bố một số chức năng hữu ích để phân loại và lập bản đồ ký tự. 198) Trong mọi trường hợp, đối số là một int, giá trị trong đó phải là thể hiện như một ký tự chưa ký hoặc bằng giá trị của macro EOF. Nếu đối số có bất kỳ giá trị nào khác, hành vi không được xác định.

Điều này cũng giữ cho draft C99 standard là tốt, bạn có thể tìm thấy nó trong cùng một phần.

Các vấn đề liên quan