如何从大字符串中一次打印 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 行?的主要内容,如果未能解决你的问题,请参考以下文章

2016.06.06 周一 C语言 将字符串根据字符的ASCII码从大到小排序并打印出字符串中的字符类型的总数

如何从输入文件中一次读取两行并将它们添加到对象中?

如何在R中一次按两列对行进行排名?

如何在 c# wpf 中一次加载/保存多个文件? [关闭]

在for循环中一次替换字符串中的所有字符

在node.js中一次读取一个字符的文件?