2D阵列C的快速输出

时间:2017-01-03 21:15:50

标签: c arrays performance optimization

我希望使用输出针对速度进行优化的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行显示速度,从而正确格式化网格。

作为参考,我使用第一种方法时大约需要33ms,第二种方法需要1.5ms。

2 个答案:

答案 0 :(得分:4)

您可以使用fwrite():

一次写入每一行
for (int row = 0; row < 20; ++row) {
    fwrite(grid[row], sizeof grid[row], 1, stdout);
    putchar('\n');
}

BTW,使用grid编写整个printf("%s", grid)的代码很可能导致未定义的行为。 %s要求参数是指向以null结尾的字符串的指针,并且grid可能在结尾处没有空值。如果它似乎正在工作,那只是偶然的,因为在grid之后的内存中恰好有一个空字节。

请注意,此解决方案仅适用于char的实际二维数组。如果它是一个指针数组,您可以用一个变量或宏替换sizeof grid[row],该变量或宏指定grid[row]指向的每一行的大小(或者只是硬编码的30,如问题)。

答案 1 :(得分:2)

如果你让每一行都以&#39; \ 0&#39; char,你可以这样做:

for(int row=0; row<20; ++row)
{
    printf("%s\n", grid[row]);
}