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

C++ 動態字串緩衝區:迴圈索引變數錯誤導致輸出異常

     編輯:程式設計綜合問答

問題代碼片段

for (int j = 0; j < i - 1; j++)
    cout << temp[i]; // 錯誤:應為 temp[j]

程式嘗試動態擴充字元陣列儲存輸入字元,最後輸出時使用錯誤的索引變數。

錯誤分析

  • 迴圈變數為 j,但陣列索引卻用 i(外層計數器),導致重複輸出同一位置(越界)的字元。
  • temp[i] 在迴圈結束時指向下一個未寫入的位置,內容未定義。

修正版本

for (int j = 0; j < i - 1; ++j)
    cout << temp[j]; // 正確:使用迴圈變數 j

改進建議:使用 std::string 或 std::vector

手動管理 new[]/delete[] 易出錯且效率低(每次擴充皆重新配置、複製)。現代 C++ 應直接使用:

std::string s;
char ch;
while (cin >> ch)
    s.push_back(ch);
cout << s;
  • std::string 內部採用指數增長策略,攤銷 O(1) 擴充。
  • 自動管理記憶體,杜絕洩漏與越界。
  • 支援 SSO(小字串最佳化),短字串零配置。

總結

索引變數誤用是典型的粗心錯誤;生產代碼請優先使用標準庫容器,專注於業務邏輯而非記憶體管理細節。

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