錯誤代碼分析
#include
#define ai // 錯誤:宏定義無法作為變量存儲輸入
int main(void) {
scanf("%s", &"ai"); // 錯誤:字符串字面量不可寫,且取地址無意義
printf("%s", "ai"); // 輸出字面量"ai"而非輸入內容
return 0;
}
三大核心錯誤
- 宏≠變量:
#define ai只是預處理替換,不分配內存,無法存儲數據。
- 字符串字面量不可寫:
"ai"存儲在只讀數據區,scanf嘗試寫入會導致段錯誤(Segmentation Fault)。
- 數組名即地址:
scanf("%s", ai)中ai已是首元素地址,無需&。
正確寫法
#include
int main(void) {
char ai[100]; // 1. 定義字符數組分配內存
scanf("%99s", ai); // 2. 直接用數組名,防止緩衝區溢出
printf("%s", ai); // 3. 輸出數組內容
return 0;
}
進階補充
%s遇空白停止讀取,含空格輸入需用fgets(ai, sizeof(ai), stdin)。
- 單引號
'ai'是多字符常量(實現定義),非字符串,作printf參數行為未定義。
- 調試技巧:編譯加
-Wall -Wextra,運行用valgrind檢測內存錯誤。