[英]Fast Output of 2D Array C
我正在尋找一種輸出針對速度進行優化的2D數組的方法。 目前我正在使用:
for (int row(0); row < 20; ++row)
{
for (int col(0); col < 30; ++col)
{
putchar(grid[row][col]);
}
putchar('\n');
}
這工作正常,但是在測試了幾件事之后,我注意到使用
printf("%s", grid);
我獲得了巨大的速度提升,但是它的格式設置不正確,因為它只會為我的數組而不是我想要的30x20網格輸出一長串字符。 我想知道是否有任何方法可以獲得正確格式化網格的printf
行顯示的速度。
作為參考,使用第一種方法時,我得到大約33毫秒;使用第二種方法時,我得到大約1.5毫秒。
您可以使用fwrite()一次寫入每一行:
for (int row = 0; row < 20; ++row) {
fwrite(grid[row], sizeof grid[row], 1, stdout);
putchar('\n');
}
順便說一句,您使用printf("%s", grid)
編寫整個grid
代碼很可能導致未定義的行為。 %s
要求參數必須是一個以null終止的字符串的指針,並且grid
可能在末尾沒有null。 如果它似乎在工作,那只是偶然,因為在grid
后面的內存中碰巧有一個空字節。
請注意,此解決方案僅適用於char
的實際二維數組。 如果它是一個指針數組,則可以用一個變量或宏替換sizeof grid[row]
,該變量或宏指定grid[row]
指向的每一行的大小(或者像問題中那樣只是硬編碼的30
)。
如果使每行以'\\ 0'字符結尾,則可以執行以下操作:
for(int row=0; row<20; ++row)
{
printf("%s\n", grid[row]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.