Библиотека Ncurses и чтение из файла - PullRequest
0 голосов
/ 03 января 2019

Какую функцию я должен использовать, чтобы прочитать из текстового файла строку и затем распечатать ее в окне ncurses.Я пробовал:

int main ( int argc, char **argv) {
    FILE *src;
    src = fopen (argv[1], "r");
    WINDOW *my_win;
    initscr();
    cbreak();
    noecho();
    my_win=newwin(30, 30, 0, 0);

    char *s;
    s = malloc (500 * sizeof (char) ); 
    fgets( s, 500, src);
    mvwprintw(my_win, 3, 5, s);
    wrefresh(my_win);
    fclose(src);
    endwin();
    return 0;
}

1 Ответ

0 голосов
/ 03 января 2019

В целом, это должно работать, но вы звоните endwin() без задержки, поэтому у вас не будет возможности увидеть свое окно. Попробуйте это:

...
fclose(src);
sleep(5);
endwin();
return 0;

}

чтобы увидеть ваше окно до того, как вы его закроете.

Если вы наблюдаете segfault, убедитесь, что открытие вашего файла прошло успешно и, конечно, убедитесь, что вы передали имя файла в качестве аргумента при запуске:

FILE *src;
if (argc != 2) {
    printf("Filename missing!\n");
    exit(EXIT_FAILURE);
}
src = fopen (argv[1], "r");
if (src == NULL) {
    perror("fopen");
    exit(EXIT_FAILURE);
}

Кроме того, это не имеет особого смысла:

char *s;
s = malloc (500 * sizeof (char)); 
fgets( s, 500, src);

malloc() - для динамически распределенных (или очень больших). Лучше использовать это:

char s[500];
fgets(s, sizeof(s), src);

И не используйте * sizeof(char) в любом случае, это выглядит некрасиво и не нужно, поскольку sizeof(char) всегда гарантированно будет 1.

...