<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ejudge.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Libchecker%3Achecker_read_buf_ex</id>
	<title>Libchecker:checker read buf ex - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ejudge.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Libchecker%3Achecker_read_buf_ex"/>
	<link rel="alternate" type="text/html" href="https://ejudge.ru/wiki/index.php?title=Libchecker:checker_read_buf_ex&amp;action=history"/>
	<updated>2026-04-12T21:44:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://ejudge.ru/wiki/index.php?title=Libchecker:checker_read_buf_ex&amp;diff=2913&amp;oldid=prev</id>
		<title>Cher: Created page with 'Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/[[Libchecker:Функци…'</title>
		<link rel="alternate" type="text/html" href="https://ejudge.ru/wiki/index.php?title=Libchecker:checker_read_buf_ex&amp;diff=2913&amp;oldid=prev"/>
		<updated>2010-07-04T20:02:57Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;Навигация: &lt;a href=&quot;/wiki/index.php/Main_Page&quot; title=&quot;Main Page&quot;&gt;Главная страница&lt;/a&gt;/&lt;a href=&quot;/wiki/index.php/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_ejudge&quot; title=&quot;Система ejudge&quot;&gt;Система ejudge&lt;/a&gt;/&lt;a href=&quot;/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B&quot; title=&quot;Проверяющие программы&quot;&gt;Проверяющие программы&lt;/a&gt;/&lt;a href=&quot;/wiki/index.php/Libchecker&quot; title=&quot;Libchecker&quot;&gt;libchecker&lt;/a&gt;/[[Libchecker:Функци…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Проверяющие программы]]/[[libchecker]]/[[Libchecker:Функции|Функции]]/[[Libchecker:Чтение файла как текста|Чтение файла как текста]]/&amp;lt;tt&amp;gt;[[Libchecker:checker_read_buf_ex|checker_read_buf_ex]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tt&amp;gt;checker_read_buf_ex&amp;lt;/tt&amp;gt; &amp;amp;mdash; чтение одного [[элемент ввода|элемента ввода]] из [[текстовый файл|текстового файла]].&lt;br /&gt;
&lt;br /&gt;
 char *&lt;br /&gt;
 checker_read_buf_ex(&lt;br /&gt;
         FILE *f,&lt;br /&gt;
         [[libchecker:checker_error_func_t|checker_error_func_t]] error_func,&lt;br /&gt;
         const char *name,&lt;br /&gt;
         int eof_error_flag,&lt;br /&gt;
         char *sbuf,&lt;br /&gt;
         size_t ssz,&lt;br /&gt;
         char **pdbuf,&lt;br /&gt;
         size_t *pdsz);&lt;br /&gt;
&lt;br /&gt;
Функция считывает один [[элемент ввода]] из [[текстовый файл|текстового файла]] &amp;lt;tt&amp;gt;f&amp;lt;/tt&amp;gt; в память. Пробельные символы, возможно находящиеся во входном файле перед элементом ввода, игнорируются.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt; &amp;amp;mdash; это дополнительный пояснительный текст, который будет выводиться в случае ошибки. В частности, этот текст может задавать название считываемого из файла параметра (например, &amp;lt;tt&amp;gt;&amp;amp;quot;имя узла графа&amp;amp;quot;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Параметр &amp;lt;tt&amp;gt;eof_error_flag&amp;lt;/tt&amp;gt; определяет, должна ли диагностироваться ошибка в случае, если выполняется попытка чтения элемента ввода после конца файла. Если параметр &amp;lt;tt&amp;gt;eof_error_flag&amp;lt;/tt&amp;gt; равен 0, то при попытке чтения после конца файла функция просто вернет значение NULL.&lt;br /&gt;
Если же этот параметр имеет ненулевое значение, то при достижении конца файла будет вызвана функция вывода сообщения об ошибке, переданная в параметре &amp;lt;tt&amp;gt;error_func&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если параметр &amp;lt;tt&amp;gt;pdbuf&amp;lt;/tt&amp;gt; равен NULL или параметр &amp;lt;tt&amp;gt;pdsz&amp;lt;/tt&amp;gt; равен NULL, то функция выполняет чтение элемента ввода в буфер ограниченного размера. Параметр &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt; задает адрес буфера, а &amp;lt;tt&amp;gt;ssz&amp;lt;/tt&amp;gt; &amp;amp;mdash; его размер. Если элемент ввода имеет длину, большую, чем ssz - 1, то есть не умещается в буфер, вызывается функция &amp;lt;tt&amp;gt;error_func&amp;lt;/tt&amp;gt; для выдачи сообщения об ошибке и завершения работы. В конец считанного элемента ввода добавляется нулевой байт. Функция возвращает адрес начала буфера (то есть значение параметра &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt;), либо NULL при попытке чтения после конца файла при значении параметра &amp;lt;tt&amp;gt;eof_error_flag&amp;lt;/tt&amp;gt; равном 0.&lt;br /&gt;
&lt;br /&gt;
Если параметр &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt; равен NULL или параметр &amp;lt;tt&amp;gt;ssz&amp;lt;/tt&amp;gt; не превосходит 0, то функция выполняет чтение элемента ввода в динамическую память. В результате работы функции переменная, на которую указывает параметр &amp;lt;tt&amp;gt;pdbuf&amp;lt;/tt&amp;gt;, будет содержать адрес считанного элемента ввода, а переменная, на которую указывает параметр &amp;lt;tt&amp;gt;pdsz&amp;lt;/tt&amp;gt;, длину считанного элемента ввода (без учета завершающего нулевого байта). В конец считанного элемента ввода добавляется нулевой байт. Память для содержимого строки выделяется на куче с помощью функций &amp;lt;tt&amp;gt;[[libchecker:xmalloc|xmalloc]]&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;[[libchecker:xrealloc|xrealloc]]&amp;lt;/tt&amp;gt;. Функция возвращает адрес начала считанной строки, либо NULL при попытке чтения после конца файла при значении параметра &amp;lt;tt&amp;gt;eof_error_flag&amp;lt;/tt&amp;gt; равном 0.&lt;br /&gt;
&lt;br /&gt;
Если параметр &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt; не равен NULL, параметр &amp;lt;tt&amp;gt;ssz&amp;lt;/tt&amp;gt; больше 0, параметры &amp;lt;tt&amp;gt;pdbuf&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;pdsz&amp;lt;/tt&amp;gt; не равны NULL, функция работает как комбинация двух вышеописанных режимов работы. Если длина элемента ввода такова, что он помещается в буфер &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt; размера &amp;lt;tt&amp;gt;ssz&amp;lt;/tt&amp;gt;, то динамическая память не используется, и возвращается значение &amp;lt;tt&amp;gt;sbuf&amp;lt;/tt&amp;gt;. Если же элемент ввода длиннее буфера, то он будет размещен в динамической памяти, и будет возвращен адрес начала считанной строки.&lt;br /&gt;
&lt;br /&gt;
Функция не предназначена для работы с бинарными файлами. Если при чтении из файла был считан символ, который не можен находиться в текстовом файле, вызывается функция &amp;lt;tt&amp;gt;error_func&amp;lt;/tt&amp;gt; для вывода сообщения об ошибке и завершения работы.&lt;br /&gt;
&lt;br /&gt;
Если при чтении произошла ошибка ввода, программа завершается, и диагностируется [[внутренняя ошибка проверки]]. Для этого используется функция &amp;lt;tt&amp;gt;[[libchecker:fatal_CF|fatal_CF]]&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Cher</name></author>
		
	</entry>
</feed>