繁体   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