首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C語言scanf/printf常見錯誤:宏定義不是變量、數組名即地址

     編輯:程式設計綜合問答

錯誤代碼分析

#include 
#define ai  // 錯誤:宏定義無法作為變量存儲輸入

int main(void) {
    scanf("%s", &"ai"); // 錯誤:字符串字面量不可寫,且取地址無意義
    printf("%s", "ai"); // 輸出字面量"ai"而非輸入內容
    return 0;
}

三大核心錯誤

  1. 宏≠變量:#define ai只是預處理替換,不分配內存,無法存儲數據。
  2. 字符串字面量不可寫:"ai"存儲在只讀數據區,scanf嘗試寫入會導致段錯誤(Segmentation Fault)。
  3. 數組名即地址: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檢測內存錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved