thể trùng lặp:
warning: format not a string literal and no format argumentsTại sao printf (char []) tạo ra một cảnh báo, trong khi đó printf ("asdf") không
Tôi có câu hỏi rất đơn giản: Tại sao khi Tôi thực hiện char[] s = "hi"; printf(s)
nó đưa ra cảnh báo: "cảnh báo: định dạng không phải là chuỗi ký tự và không có đối số định dạng", trong khi đó printf("aa")
thì không.
Tôi đã đọc một sự khác biệt giữa mảng char và chuỗi chữ (một là const char const*
và khác là char*
), nhưng từ printf()
chữ ký:
tôi thấy rằng nó phù hợp cho bất kỳ đó loại. Vì vậy, câu hỏi của tôi là lý do tại sao printf("aaa")
không phát hành bất kỳ cảnh báo nào (bằng cách nào đó nó kiểm tra rằng chữ là một const, mảng trong khi đó không phải là)?
FWIW, VC++ không khiếu nại về các chữ không liên tục. – Mysticial
Trình biên dịch nào thực hiện điều này với mã của bạn? – Jay
@ Tâm lý, tôi đồng ý. VC không phàn nàn. Tự hỏi tại sao trình biên dịch khác tuân thủ hoặc tại sao VC không? – Jay