如何知道我的下一次调用printf()是否会超过屏幕大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何知道我的下一次调用printf()是否会超过屏幕大小?相关的知识,希望对你有一定的参考价值。

我正在用C语言编写一个程序,我的问题很直接:如何知道我的下一次调用是否是在 printf() 会不会超过屏幕大小?

也就是说,有时使用print时,文字可能无法在一个屏幕上显示。例如,我有4-5个字符串要打印,我想创建一个函数,打印整个文本,或者打印到文本因屏幕大小而被切断。

答案

你可以使用 snprintf 来写入一个字符串缓冲区,然后将这个缓冲区写入实际的控制台输出。由于你似乎不能控制你要写的字符数,我建议使用 int snprintf( char* buffer, std::size_t buf_size, const char* format, ... ). 它允许你限制写入的字符数,以避免缓冲区溢出。

char buffer[80+1];  // maximum length of a complete line.
snprintf(buffer, sizeof(buffer), "my output: %d, %s", someInt, someString);
if (strlen(buffer) >= nrOfCharsLeftInLine) {
   buffer[nrOfCharsLeftInLine] = 0x0;
}
printf("%s",buffer);
另一答案

根据... C语言中如何清除控制台屏幕?,"C语言不懂屏幕的概念。所以任何代码都无法移植"。所以为了让我的问题更具体,我想寻找一种在UNIX环境下执行上述操作的方法。

我重新表述一下我的问题。

有时当你使用打印功能时,文字可能无法在一个屏幕上显示。例如,我有4-5个字符串要打印,我想创建一个函数,打印直到文本因无法容纳在剩余的可用屏幕尺寸中而被切断。

我希望存在一个系统函数(UNIX系统),当显示器向下滚动时,该函数被触发,以 "跟随 "打印的输出。也就是说,当有人在终端中不断打印时,终端会自动向下滚动,这样你就可以监视打印的输出。这样的事情存在吗?

以上是关于如何知道我的下一次调用printf()是否会超过屏幕大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何暂停 Oracle Job 的下一次运行?

在一定时间后继续循环

如果满足条件,则移动到嵌套 for 循环中的下一次迭代

使用setTimeout跳转到(Typescript).forEach循环中的下一次迭代

c# windows form,部署前的下一步是啥?

如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]