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
手動管理 new[]/delete[] 易出錯且效率低(每次擴充皆重新配置、複製)。現代 C++ 應直接使用:
std::string s;
char ch;
while (cin >> ch)
s.push_back(ch);
cout << s;
std::string 內部採用指數增長策略,攤銷 O(1) 擴充。索引變數誤用是典型的粗心錯誤;生產代碼請優先使用標準庫容器,專注於業務邏輯而非記憶體管理細節。