fread_unlocked
возвращает количество байтов, которые были фактически прочитаны. Вам нужно принять это возвращаемое значение и убедиться, что вы никогда не пытаетесь использовать больше, чем столько символов из InpFile
. Например, если вы объявляете max_ipos
в глобальной области видимости, вы можете написать:
size_t bytes_read = fread_unlocked(InpFile, 1, MAXX, stdin);
// check for errors
max_ipos = &InpFile[bytes_read];
, а затем input_int
потребуется определить, когда ipos == max_ipos
, и завершить работу перед чтением *ipos
.
Отредактировано, чтобы добавить: Обратите внимание, что (по предложению Джонатана Леффлера) я изменил порядок аргументов 1
и MAXX
на fread_unlocked
. Это потому, что вы хотите читать объекты размером 1
, а не объекты размером MAXX
.
Кстати, это:
inline int input_int(int flag=0)
не является допустимым C. Значения по умолчанию для аргументов - это C ++. (Может быть, есть компиляторы C, которые поддерживают его как расширение & mdash; я не знаю & mdash; но, безусловно, есть компиляторы C, которые этого не делают.)