c - предлоги - ввод строки с пробелами си



Как читать строку из stdin, блокируя до тех пор, пока не будет найдена новая строка? (2)

Я пытаюсь прочитать одну строку за раз, произвольной длины, из stdin в командной строке. Я не уверен, что смогу включить GNU readline и предпочту использовать библиотечную функцию.

Документация, которую я читал, предполагает, что getline должен работать, но в моих экспериментах он не блокируется. Моя примерная программа:

#include <stdio.h>
int main()
{
    char *line = NULL;
    if (getline(&line, NULL, stdin) == -1) {
        printf("No line\n");
    } else {
        printf("%s\n", line);
    }
    return 0;
}

не создает No line , которая делает ее непригодной для приема пользовательского ввода.

Как мне это сделать? Я знаю, что это должно быть тривиально, но я не смог понять это.


Попробуйте этот патч

char *line = NULL;
+size_t size;
+if (getline(&line, &size, stdin) == -1) {
-if (getline(&line, 0, stdin) == -1) {
    printf("No line\n");
} else {

Я смог воспроизвести «неблокирующее» поведение в getline :

#include <stdio.h>
#include <stdlib.h>

int main()
{
        char    *buffer;
        size_t  n = 1024;
        buffer = malloc(n);
        return getline(&buffer, &n, stdin);
}

getline(&buffer... blocks). Если я назначу NULL для buffer , он снова блокирует (как рекламируется) и сохраняет строку в новом выделенном буфере.

Но если я напишу

getline(NULL, &n, stdin);

то getline терпит неудачу и, похоже, не блокируется. Вероятно, также неправильный n или указатель файла может привести к такому же поведению. Возможно, это проблема?





io