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