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

C++ 新手常見陷阱:輸入長度與實際讀取字符數不符的原因分析

     編輯:程式設計疑難解答

問題描述

用戶輸入 len=9,但統計字符數的變量 i 輸出卻是 12。

代碼片段

char *essay = new char[len+1];
// ...
cin.ignore(INT_MAX, '\n');
for(i=0; i<len; i++)
    essay[i] = cin.get();
// 長度判斷
i=0;
while(essay[i] != '\0') i++;
cout << i; // 輸出 12

原因分析

  1. 緩衝區殘留換行符:cin >> len 後緩衝區留有 \n,雖有 cin.ignore(),但若前一次輸入有多餘字符可能未清理乾淨。
  2. cin.get() 讀取換行符:循環讀取 len 個字符時,若用戶輸入內容包含空格或換行,實際存入數組的字符可能超過預期。
  3. 字符串未以 \0 結尾:動態分配的 essay 未初始化,while(essay[i]!='\0') 會越界讀取隨機內存直到遇到 0,導致計數異常。

修正建議

// 讀取前完整清理緩衝區
cin.ignore(numeric_limits::max(), '\n');
// 使用 getline 讀取整行
cin.getline(essay, len+1);
// 或手動添加結尾
essay[len] = '\0';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved