簡體   English   中英

2D陣列C的快速輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM