在 Visual Studio 中使用 C 語言時,printf 格式字符串使用 %d 對應字符串變量,導致類型不匹配警告甚至運行時輸出異常。
char *str = "Hello";
printf("%d", str); // 錯誤:%d 期望 int,實際傳入 char*
char *str = "Hello";
printf("%s", str); // 正確:%s 對應字符串
| 佔位符 | 對應類型 | 示例 |
|---|---|---|
| %d / %i | 有符號整數 | printf("%d", 42); |
| %u | 無符號整數 | printf("%u", 42u); |
| %f | 單精度浮點數 | printf("%.2f", 3.14f); |
| %lf | 雙精度浮點數 | printf("%.2lf", 3.14); |
| %c | 單個字符 | printf("%c", 'A'); |
| %s | 字符串 (char*) | printf("%s", "Hello"); |
| %p | 指針地址 | printf("%p", (void*)ptr); |
Visual Studio 會在編譯階段給出 warning C4477 或 C4047,運行時可能打印垃圾值或崩潰。建議開啟 /W4 警告等級並視警告為錯誤 (/WX)。