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

C 語言字符數組缺少結束符導致輸出亂碼:%s 格式化的隱性要求

     編輯:程式設計綜合問答

現象

char a[10];
for (i=0; i<10; i++) scanf_s("%c", &a[i]);
printf("%s", a); // 輸入 10 個字符後輸出亂碼

原因

  • char a[10] 未顯式初始化,棧上隨機值。
  • scanf_s("%c") 逐個讀取字符,**不自動添加 '\0'**。
  • 輸入 10 個字符填滿數組,無空位存放結束符。
  • printf("%s") 從首地址連續輸出,**直到遇到 '\0'**,越界讀取相鄰內存顯示亂碼。

修正

char a[11] = {0}; // 多留一位,自動零初始化
for (i=0; i<10; i++) scanf_s("%c", &a[i]);
// 或
scanf_s("%10s", a, 11); // 一次讀取字符串,自動加 '\0'
printf("%s", a);

核心原則

C 語言字符串**本質是以 '\0' 結尾的字符數組**;任何用 %s、strcpy、strlen 等標準庫函數處理的字符數組,**必須保證結束符存在且在邊界內**。

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