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

C 語言字元陣列未初始化元素輸出亂碼:記憶體殘留值與終端機顯示機制

     編輯:程式設計綜合問答

程式碼分析

char a[5];
scanf("%c%c", &a[1], &a[2]); // 只寫入 a[1], a[2]
a[3] = 'm';
printf("%c\n", a[4]); // a[4] 未初始化

輸出 ? 的原因

  1. 未初始化記憶體:a[4] 為自動儲存期區域變數,內容為棧上隨機殘留值(不定值)。
  2. 終端機無法顯示:隨機值可能落在不可列印控制字元範圍(0-31, 127),終端機以替代字元 ? 或 顯示。
  3. 編碼處理:若執行環境為 UTF-8,單一位元組若非合法 ASCII 也會顯示替代符號。

驗證實驗

printf("a[4] = %d (0x%02X)\n", a[4], (unsigned char)a[4]);
// 觀察實際數值,通常非 '?' (ASCII 63)

正確初始化習慣

char a[5] = {0}; // 全部歸零
// 或
memset(a, 0, sizeof(a));

總結

字元陣列未初始化元素內容不定,輸出時終端機以 ? 替代不可列印字元。良習:定義陣列即初始化,避免未定義行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved