C多维数组镜像自身

  • 本文关键字:镜像 数组 arrays c
  • 更新时间 :
  • 英文 :


在我尝试制作角色渲染器时,我偶然发现数组不断重复,而没有任何明显的理由这样做。

char screen[6][40] = {
"                                        ",
"                                        ",
"                                        ",
"                                        ",
"                                        ",
"                                        ",
};
void screenRedraw()
{
clearScreen;
for (int i = 0; i < 6; i++)
printf("%sn", screen[i]);
}
void main()
{
screen[2][3] = 'g';
screenRedraw();
}

预期的输出当然是1";g";,但是它印了三张!

             g                                                                                                                                                            
g                                                                                                                                                            
g                                                                                                                                                            
                                                  

我怀疑问题出在screen[2][3] = 'g'上,但不知道如何解决。

您可以打印精确的字符数:

void screenRedraw()
{
clearScreen();
for (int i = 0; i < 6; i++) {
printf("%.*sn", 40, screen[i]);
}
}

@编辑打字错误-是%.*s而不是.*%s

不要硬编码空格,也不要在循环中使用幻数,它很容易出错,memset可以帮助:

#include <stdio.h>
#include <string.h>
enum {rows = 6, cols = 40};
static char screen[rows][cols + 1]; // + 1 for the trailing NUL
void initScreen(void)
{
for (size_t row = 0; row < rows; row++)
{
memset(screen[row], ' ', cols);
}
}
void screenRedraw()
{
// clearScreen();
for (size_t row = 0; row < rows; row++)
{
printf("%sn", screen[row]);
}
}
int main(void)
{
initScreen();
screen[2][3] = 'g';
screenRedraw();
}

最新更新