私は現在、C の有名な本である The C Programming Language, 2Ed を勉強しています。そして、P.29 のコードを試してみると、getline 関数に何か問題があると思います。
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;
}
for ループが終了したとき、i == lim-1
そしてc == '\n'
? s[lim]
この場合、 「\0」に設定されるため、配列は境界外になると思います。
これは間違っていると思う人はいますか?ご協力いただきありがとうございます。