В вашем коде у вас есть:
char *buffer = malloc(LENGTH);
unsigned char length_read;
length_read = getline(&buffer, 0, stdin);
Что заставляет вас думать, что вы можете передать нулевой указатель на длину?Спецификация POSIX для getline()
определенно не позволяет этого - она требует, чтобы функция могла записать в *n
.Я не вижу облегчения в справочных страницах Linux для getline(3)
.Я думаю, что вы используете неопределенное поведение;Я удивлен, что вы не просто зависаете.
Кроме того, если вы печатаете оба ваших заявления printf()
, то getline()
само по себе не застревает.
Использование unsigned char
длявозвращаемое значение из getline()
нарезается смертью - оно возвращает ssize_t
, которое обычно составляет не менее 4 байтов и часто 8 байтов в длину.Возможно, вы неправильно понимаете, что он возвращает, особенно если он встречает EOF и возвращает -1
(а -1
- это возвращаемое значение, когда он встречает EOF, а не EOF
, хотя обычно оба они одинаковы).
Более типичное использование:
char *buffer = 0;
size_t buflen = 0;
ssize_t length_read = getline(&buffer, &buflen, stdin);
Не забудьте освободить buffer
, даже если ввод не пройден;память может быть выделена, даже если она сразу получает EOF.