2012-07-02 31 views

Trả lời

13

Không, đây không phải là lỗi.

Bạn đang nói Format rằng đối số đầu tiên là số nguyên không dấu nhưng trên thực tế, bạn đã chuyển số nguyên đã ký. Số nguyên đã ký đó đang được hiểu là chưa ký và mẫu bit cho giá trị đã ký là -100 tương đương với giá trị chưa ký là 4294967196.

Thực tế, mã của bạn bị lỗi. Chuỗi định dạng xác định hợp đồng mà trình biên dịch không thể thực thi vì các đối số cho Format được nhập sai. Đó là trách nhiệm của bạn để đảm bảo rằng khi bạn hứa sẽ vượt qua một giá trị unsigned mà bạn thực sự vượt qua một giá trị unsigned. Sai lầm trong đoạn mã ở đây tương đương về mặt logic khi truyền một chuỗi hoặc một giá trị dấu phẩy động là một lỗi mà bạn sẽ dễ dàng nhận ra hơn.

+2

Whoeha, đây là giải thích sai chính của tôi: _unsigned decimal_ là kiểu đầu vào chứ không phải đầu ra. – NGLN

+0

@NGLN: Các chức năng kiểu printf hoạt động theo cách đó –

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