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

C++ char 數組初始化:scanf 讀取需以 \0 結尾,初始化為 {'\0','\0','\0'} 避免亂碼

     編輯:程式設計疑難解答

問題代碼


char a[3] = {'0','0','0'}; // 初始化為字符 '0' (ASCII 48)
scanf("%s", a);           // 讀入 "A" → a={'A','\0',?} 但第三字節非\0
printf("%c\n", a[2]);     // 亂碼

原因

  • `scanf("%s")` 讀取字符串,**自動在末尾追加 `\0`**。
  • 輸入 `"A"` → `a[0]='A'`、`a[1]='\0'`、`a[2]` 保持初始值 `'0'`(非 `\0`)。
  • `printf("%c", a[2])` 輸出 `'0'`(視覺上像亂碼);若後續按字符串處理,會越界讀取。

修正


char a[3] = {'\0', '\0', '\0'}; // 或 char a[3] = {0}; / char a[3] = "";
scanf("%2s", a); // 限制寬度防溢出
// 現在 a 保證以 \0 結尾,安全

最佳實踐

  • 字符數組**初始化為全 0**(`{0}` 或 `""`),確保 `\0` 終止符存在。
  • `scanf` **必須限制寬度** `%2s`(大小-1),防緩衝區溢出。
  • 現代 C++ 推薦 `std::string` + `std::cin >> str`,自動管理內存、無長度限制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved