У вас крошечная опечатка.Эта строка в функции getline:
for (i = 0; i < lim - 1 && (c = getchar() != EOF) && c != '\n'; ++i)
должна быть
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
Эффект этой опечатки состоит в том, что вы вызываете getchar()
, проверьте возвращенное значение, чтобы увидеть, равно ли оноEOF
или нет, и присвойте значение 1/0 (true / false) переменной c
.Но вам нужно присвоить возвращаемое значение от getchar()
до c
, а затем проверить, равно ли оно EOF
.
Так что если вы наберете, скажем, «test»,ваша функция getline, связанная с опечаткой, не записывала символы t e s t
в line
;вместо этого он записывал четыре значения 1 (то есть символ '\001'
, который является элементом управления A, если вы хотите думать об этом таким образом), и, поскольку это не печатный символ, ваша система отображения напечатала его как немногокоробка вместо.