我想知道是否有更好的方法在c中打印整數的數組;同時打印多個整數
目前我爲我的數組中的每個int做一個printf("%d" ,..)
。
但是,這會導致一個系統調用每個int? (如果我的理解是正確的)。
將int數組轉換爲字符串緩衝區然後在一次調用中打印緩衝區會更好。
如有必要,我可以爲它編寫代碼。
Q1。這是一個好主意還是太麻煩值得呢? Q2302。是否有任何圖書館實施這樣的事情。 (無論我谷歌回來初學者教程打印整數:S)
編輯 數組的大小不是事先知道。
我想知道是否有更好的方法在c中打印整數的數組;同時打印多個整數
目前我爲我的數組中的每個int做一個printf("%d" ,..)
。
但是,這會導致一個系統調用每個int? (如果我的理解是正確的)。
將int數組轉換爲字符串緩衝區然後在一次調用中打印緩衝區會更好。
如有必要,我可以爲它編寫代碼。
Q1。這是一個好主意還是太麻煩值得呢? Q2302。是否有任何圖書館實施這樣的事情。 (無論我谷歌回來初學者教程打印整數:S)
編輯 數組的大小不是事先知道。
當您使用printf
時,輸出已經被緩衝。系統調用僅在您刷新緩衝區時進行 - 明確地通過調用fflush(stdout)
或隱式地將\n
打印到控制檯。因此,應用程序端的預緩衝會使您的代碼更加複雜,而不會在性能上產生任何實際差異。
至於庫幫你寫int
s到一個字符串的話,你可以使用你已經在使用相同<stdio.h>
:分配足夠大的空間容納你的整數的緩衝區,使用sprintf
代替printf
寫它,然後調用printf
與整個緩衝區的內容。如果您決定在輸出中使用它們作爲分隔符,這將幫助您避免在\n
上進行刷新。
謝謝。如果它被緩衝,那麼我想我可以使用printf。雖然sprintf是一個好主意。 – 2013-04-29 03:16:24
@OsamaJaved sprintf唯一有用的情況是如果你想用'\ n'作爲分隔符,*和*你想寫入與控制檯相關的輸出流(文件輸出流不會被刷新'\ n'反正)。 – dasblinkenlight 2013-04-29 03:18:13
您已經省略了未緩衝的流 - stdout可以無緩衝,就像stderr是默認的一樣。 – 2013-04-29 10:42:33
不,它不會導致一個系統調用每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]);
如果它的緩衝我不需要擔心,那麼:D。謝謝 – 2013-04-29 03:14:31
的printf( 「%d%d%d%d \ n」,編曲[0],編曲[1],編曲[2])最多隻能寫一個write()調用 - 您擔心的系統調用。 – 2013-04-29 03:10:23
@jimmcnamara數組是動態大小的..所以不能用這種方式對它進行硬編碼。我已經更新了這個問題。 – 2013-04-29 03:12:09
您在詢問有關「多個」系統調用場景的問題。不是編程解決方法,IMO。 – 2013-04-29 03:13:29