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'**。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 等標準庫函數處理的字符數組,**必須保證結束符存在且在邊界內**。