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