我想知道是否有更好的方法在 c 中打印整数数组;
目前我printf("%d" ,.. )
为数组中的每个 int 做一个。
但是,这会导致每个 int 一个系统调用?(如果我的理解是正确的)。
最好将 int 数组转换为字符串缓冲区,然后在一次调用中打印缓冲区。
如有必要,我可以为它编写代码。
Q1。这是一个好主意还是太麻烦而不值得?
Q2。有没有实现这种东西的库。(无论我用谷歌搜索什么,都会回到打印整数的初学者教程:s)
编辑 事先不知道数组的大小。
不,它不会导致每个系统调用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]);
当您使用printf
时,输出已经被缓冲。只有当您“刷新”缓冲区时才会进行系统调用 - 通过调用显式或通过打印到控制台fflush(stdout)
隐式调用。\n
因此,应用程序端的预缓冲将使您的代码更加复杂,而不会提供任何真正的性能差异。
至于帮助您将int
s 写入字符串的库,您可以使用<stdio.h>
您已经在使用的相同:分配一个足够大的缓冲区来保存您的整数,使用sprintf
而不是printf
写入它,然后printf
使用内容调用整个缓冲区。\n
如果您决定将它们用作输出中的分隔符,这将帮助您避免刷新。