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

C getline 函數參數 lim 與索引 i 初始值解析

     編輯:程式設計綜合問答

程式碼片段

int getline(char s[], int lim) {
    int c, i;
    for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

參數 lim 意義

lim 為緩衝區最大容量(含結尾 \0)。迴圈條件 i < lim-1 確保最多寫入 lim-1 個字元,留一格給 \0,防止緩衝區溢位。

第一次執行 s[i] = c 時 i 的值

for 迴圈初始化 i = 0,條件判斷通過後執行迴圈體,因此第一次寫入時 i == 0,字元存入 s[0]。

流程圖解

  1. i = 0
  2. 讀取字元 c = getchar()
  3. 檢查 i < lim-1、c != EOF、c != '\n'
  4. 全部為真 → s[0] = c、++i (i 變 1)
  5. 重複直到換行、EOF 或滿緩衝區
  6. 若讀到 \n,存入 s[i]、++i
  7. s[i] = '\0' 結束字串
  8. 回傳實際讀取長度 i

常見誤區

  • 以為 lim 是「要讀幾個字元」——實為「緩衝區大小」。
  • 忽略 EOF 處理,導致檔案結束時無限迴圈。
  • 未檢查回傳值判斷是否讀到資料。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved