我应该使用什么函数才能从文本文件中读取一行,然后在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;
}
这通常应该有效,但您立即调用endwin()
,因此您将没有机会看到您的窗口。试试这个:
...
fclose(src);
sleep(5);
endwin();
return 0;
}
以在结束窗口之前查看窗口。
如果您观察到段错误,请确保您的文件打开成功,当然还要确保在启动时将文件名作为参数传递:
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
.