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]。
i = 0c = getchar()i < lim-1、c != EOF、c != '\n's[0] = c、++i (i 變 1)\n,存入 s[i]、++is[i] = '\0' 結束字串ilim 是「要讀幾個字元」——實為「緩衝區大小」。EOF 處理,導致檔案結束時無限迴圈。