我希望使用输出针对速度进行优化的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。
答案 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]);
}