Libchecker:checker read buf 2

From EjudgeWiki
Revision as of 10:13, 23 August 2008 by Cher (talk | contribs) (New page: Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/[[Libchecker:Функции|Фун...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/Функции/Чтение файла как текста/checker_read_buf_2

Функция checker_read_buf_2 — чтение одного элемента ввода из текстового файла.

char *checker_read_buf_2(int ind, const char *name, int eof_error_flag, char *sbuf, size_t ssz, char **pdbuf, size_t *pdsz);

Функция считывает один элемент ввода из текстового файла, задаваемого своим индексом ind в память. Пробельные символы, возможно находящиеся во входном файле перед элементом ввода, игнорируются.

Параметр name — это дополнительный пояснительный текст, который будет выводиться в случае ошибки. В частности, этот текст может задавать название считываемого из файла параметра (например, "имя узла графа"). Параметр eof_error_flag определяет, должна ли диагностироваться ошибка в случае, если выполняется попытка чтения элемента ввода после конца файла. Если параметр eof_error_flag равен 0, то при попытке чтения после конца файла функция просто вернет значение NULL. Если же этот параметр имеет ненулевое значение, то программа завершится либо с ошибкой неправильного формата результата при чтении из файла с индексом 1 (результат работы тестируемой программы), либо завершится с внутренней ошибкой проверки при чтении из файла с индексами 0 или 2 (входные данные и правильный ответ соответственно).

Если параметр pdbuf равен NULL или параметр pdsz равен NULL, то функция выполняет чтение элемента ввода в буфер ограниченного размера. Параметр sbuf задает адрес буфера, а ssz — его размер. Если элемент ввода имеет длину, большую, чем ssz - 1, то есть не умещается в буфер, диагностируется либо ошибка неправильного формата результата, либо внутренняя ошибка проверки, и проверяющая программа завершается. В конец считанного элемента ввода добавляется нулевой байт. Функция возвращает адрес начала буфера (то есть значение параметра sbuf), либо NULL при попытке чтения после конца файла при значении параметра eof_error_flag равном 0.

Если параметр sbuf равен NULL или параметр ssz не превосходит 0, то функция выполняет чтение элемента ввода в динамическую память. В результате работы функции переменная, на которую указывает параметр pdbuf, будет содержать адрес считанного элемента ввода, а переменная, на которую указывает параметр pdsz, длину считанного элемента ввода (без учета завершающего нулевого байта). В конец считанного элемента ввода добавляется нулевой байт. Память для содержимого строки выделяется на куче с помощью функций xmalloc и xrealloc. Функция возвращает адрес начала считанной строки, либо NULL при попытке чтения после конца файла при значении параметра eof_error_flag равном 0.

Если параметр sbuf не равен NULL, параметр ssz больше 0, параметры pdbuf и pdsz не равны NULL, функция работает как комбинация двух вышеописанных режимов работы. Если длина элемента ввода такова, что он помещается в буфер sbuf размера ssz, то динамическая память не используется, и возвращается значение sbuf. Если же элемент ввода длиннее буфера, то он будет размещен в динамической памяти, и будет возвращен адрес начала считанной строки.

Функция не предназначена для работы с бинарными файлами.

Если при чтении произошла ошибка ввода, программа завершается, и диагностируется внутренняя ошибка проверки.