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

C 語言結構體字符數組長度導致 printf 輸出亂碼:缺少結束符 \0 空間

     編輯:程式設計綜合問答

錯誤代碼


char name[2]; // 僅 2 字節
scanf("%s", name); // 輸入 "ab" 寫入 'a','b',無空間存 '\0'
printf("%s\n", name); // 繼續讀取相鄰內存直到遇 \0,輸出亂碼

根本原因

C 語言字符串以 \0 結尾。name[2] 只能存 1 個有效字符 + \0。輸入 "ab" 導致緩衝區溢出,\0 丟失,printf("%s") 越界讀取。

修正


#define NAME_LEN 32
char name[NAME_LEN];
scanf("%31s", name); // 寬度限制防溢出

最佳實踐

  • 字符串緩衝區預留足夠長度 (業務長度 + 1 結束符 + 安全余量)。
  • scanf 使用寬度限制 %31s,fgets 指定大小更安全。
  • 編譯器開啟 -Wformat-overflow (GCC) / /analyze (MSVC) 靜態檢測。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved