int get_next_line(int fd, char **line);
Это полезная функция.Предположительно, он выделяет массив символов ориентировочно достаточного размера, считывает в него строку, перераспределяет и считывает остаток, если необходимо, а затем передает выделенную строку обратно, присваивая ее разыменованному второму аргументу (*line = allocated_string;
).
int get_next_line(int fd, char *line);
Это чепуха.Нет способа написать get_next_line
, который можно было бы использовать так же удаленно, как предыдущий.Он не может определить размер передаваемого ему массива символов и не может перераспределить этот массив.Единственный способ указать, что эта функция должна вести себя достаточно разумно, это потребовать, чтобы аргумент был массивом некоторого заранее определенного размера, указанного в другом месте.Это может быть полезно только в некоторых довольно узких контекстах.
Обратите внимание, что это не сразу очевидное наблюдение.Раньше язык C имел gets
до 2011 года. Когда-то программисты были довольно небрежны.
int get_next_line(int fd, char *line, size_t size);
Это может быть несколько полезной функцией.Он может работать почти как стандартная функция read
, за исключением того, что он не будет читать после первого символа конца строки.(Или как fgets
для ручек Posix fike.) Конечно, пользователям нужно иметь дело со случаем, когда строка ввода длиннее, чем их массив.Предположительно get_next_line
вернет номер, если отсканированные символы.
Примечание const int
бесполезно в прототипах функций.Все стандартные функции указывают int
в таких случаях.