5

我想知道是否有更好的方法在 c 中打印整数数组;

目前我printf("%d" ,.. ) 为数组中的每个 int 做一个。

但是,这会导致每个 int 一个系统调用?(如果我的理解是正确的)。

最好将 int 数组转换为字符串缓冲区,然后在一次调用中打印缓冲区。

如有必要,我可以为它编写代码。

Q1。这是一个好主意还是太麻烦而不值得?

Q2。有没有实现这种东西的库。(无论我用谷歌搜索什么,都会回到打印整数的初学者教程:s)

编辑 事先不知道数组的大小。

4

2 回答 2

4

不,它不会导致每个系统调用int,除非您设置stdout为无缓冲模式。这是 stdio 的重点:为您缓冲输出,因此您不必自己做。函数本身的额外调用开销很小。printf如果您发现自己需要更高的性能,您可以尝试以下方法:

for (i=0; i+4<=N; i+=4)
    printf("%d %d %d %d ", a[i], a[i+1], a[i+2], a[i+3]);
for (; i<N; i++)
    printf("%d ", a[i]);
于 2013-04-29T03:10:12.600 回答
3

当您使用printf时,输出已经被缓冲。只有当您“刷新”缓冲区时才会进行系统调用 - 通过调用显式或通过打印到控制台fflush(stdout)隐式调用。\n因此,应用程序端的预缓冲将使您的代码更加复杂,而不会提供任何真正的性能差异。

至于帮助您将ints 写入字符串的库,您可以使用<stdio.h>您已经在使用的相同:分配一个足够大的缓冲区来保存您的整数,使用sprintf而不是printf写入它,然后printf使用内容调用整个缓冲区。\n如果您决定将它们用作输出中的分隔符,这将帮助您避免刷新。

于 2013-04-29T03:10:03.123 回答