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

C++ 字符串長度函數死循環:while 判斷條件未遞增索引導致

     編輯:程式設計綜合問答

錯誤代碼

int slen(char x[], int n) {
    int i, j = 0, m = n;
    for (i = 0; i < m; i++)
        while (x[i] != '\0') { j++; } // 死循環:i 不變,條件永真
    return j;
}

問題分析

外層 for 遍歷索引 i,內層 while 檢查同一 x[i] 是否為終止符。若非 '\0',j++ 但 i 不變,陷入無限循環。

修正版本

int slen(char x[], int n) {
    int i, j = 0;
    for (i = 0; i < n; i++) {
        if (x[i] == '\0') break; // 遇到終止符退出
        j++;
    }
    return j;
}

或標準庫 strlen 實現邏輯:

int slen(const char *x) {
    int len = 0;
    while (x[len] != '\0') len++;
    return len;
}

教訓

  • 循環體必須包含使循環條件最終為假的語句(如索引遞增)。
  • 字符串長度計算只需單層循環,遇 '\0' 即停止。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved