pdcurses на windows - printw () не печатает длинные строки (C) - ncurses отлично работает на linux - возможная ошибка или моя реализация неверна? - PullRequest
1 голос
/ 15 марта 2020

Ниже приведен мой код, демонстрирующий, что длинные строки не могут печататься с помощью pdcurses.

#include <curses.h>
#include <string.h>

#define SIZE 256

void get_file_data(char *filename, char *file_data)
{
    // CREATES POINTER TO FILE
    FILE *file;

    // LINE BUFF OF FILE
    char buff[SIZE];
    // OPENS GRAPHICS FILE
    file = fopen(filename, "a+");

    // LOOPS UNTIL EVERY LINE HAS BEEN PRINTED
    while(fgets(buff, SIZE, (FILE*)file))
    {
        // PRINTS EACH LINE
        strcat(file_data, buff);
    }
    strcat(file_data, "\n");

    // CLOSES FILE
    fclose(file);
}

int main()
{
    initscr();

    char input[SIZE];
    char str[12800];

    get_file_data("graphic.txt", str);

    printw("%s", str);

    getstr(input);

    endwin();

    return 0;
}

Это содержимое graphi c .txt


   -------------------------------------------------------
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   -------------------------------------------------------

   Hello there!

, и это что выводит моя программа


   -------------------------------------------------------
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                   ^]"b

Есть ли проблема с моим кодом или это проблема с pdcurses? Как упоминалось в заголовке, ncurses отлично работает на linux, но я пытаюсь скомпилировать на windows с помощью pdcurses.

1 Ответ

1 голос
/ 15 марта 2020

Внутренний буфер для printw() в PDCurses составляет всего 513 символов - этого достаточно для шести строк из 80 столбцов. Более длинные строки обрезаются. Это то, что я должен подумать о реорганизации.

Между тем, вы можете обойти это, просто напечатав каждую строку как go, поскольку вы уже читаете их построчно. линия -

while(fgets(buff, SIZE, (FILE*)file))
{
    // PRINTS EACH LINE
    printw("%s\n", buff);
}
...