如何从大字符串中一次打印 20 行?
Posted
技术标签:
【中文标题】如何从大字符串中一次打印 20 行?【英文标题】:how to print 20 lines at a time from a large string? 【发布时间】:2021-07-18 11:35:50 【问题描述】:所以我有这个程序可以读取文件。并将其读入这个名为accepting[900000]
的大字符串中,现在问题是,我需要一次显示文件中的内容 20 行,就像您使用 more 命令时一样。我的问题是可以使用什么命令来执行类似exelp("more", "more", "-20", NULL)?
的操作,我需要一次显示 20 行内容,并通过让用户推送空间来显示接下来的 20 行。请帮我!非常感谢。
【问题讨论】:
您将整个文件内容存储在一个 900K 的字符串中,分配在堆栈上? 这是一个绝望的措施 【参考方案1】:这样的?不知道您是如何等待用户输入的,所以您必须填写它。
int print_20_lines(char* accepting, int current_index)
int idx = current_index;
int num_lines = 0;
for(;accepting[idx] != '\0' && num_lines < 20;idx++)
if(accepting[idx] == '\n')
num_lines++;
printf("%.*s", idx-current_index, accepting+current_index);
if(accepting[idx] == '\0')
return -1;
else
return idx;
void print_20_lines_a_time_with_each_user_input(char* accepting)
int idx = 0;
while(idx != -1)
idx = print_20_lines(accepting, idx);
wait_for_space();
顺便说一句,accepting[900000]
很快就会在 Windows 和 Linux 上达到最大堆栈大小。在末尾添加 0 可能会使您的程序崩溃。
【讨论】:
我非常感谢您的回复,但有没有像我最初所说的那样将内容移植到“更多”命令的端口? 并非如此。more
是一个 2000 行的程序,它使用 VT100 控制序列和大量 POSIX API 来处理屏幕滚动。复制该功能至少需要几天时间。以上是关于如何从大字符串中一次打印 20 行?的主要内容,如果未能解决你的问题,请参考以下文章