我使用函数来分配2D数组的模式。除了我的' ans'之外,所有其他阵列都在显示。数组(最后一行'短划线丢失)。我猜这个问题是因为' pat2match'功能(合并所有模式)。因为,如果我不指定' ans'这个'功能'并打印一个空模式数组,所有破折号显示。
合并模式的函数:
char pat2match(char mypattern[13][13], char pat1[13][13], char pat2[13][13],
char pat3[13][13], char pat4[13][13], char pat5[13][13])
{
int r,c;
overlap(mypattern,pat5);
overlap(mypattern,pat2);
overlap(mypattern,pat4);
overlap(mypattern,pat3);
return overlap(mypattern,pat1);
}
分配' ans':
mytile(ans);
for(r=0;r<13;r++)
{
for(c=0;c<13;c++)
{
ans[r][c] = pat2match(ans,pattern1,pattern2,pattern3,pattern4,pattern5);
}
}
重叠功能:
char overlap(char pat1[13][13], char pat2[13][13])
{
int r,c;
for(r=0;r<13;r++)
{
//printf("|");
for(c=0;c<13;c++)
{
if(pat1[r][c] == ' ' || pat2[r][c] != ' ')
{
pat1[r][c] = pat2[r][c];
}
//printf(" %c ", pat1[r][c]);
}
//printf("|\n");
}
return pat1[r][c];
}
空图案(短划线就像边框一样):
void mytile(char pat[13][13])
{
int r,c;
for(r=0;r<13;r++)
{
for(c=0;c<13;c++)
{
if(r==0 || r==12)
{
pat[r][c] = '-';
}
else
{
pat[r][c] = ' ';
}
}
}
}
答案 0 :(得分:2)
overlap
的返回值是未定义的行为:
return pat1[r][c];
当执行此return语句时,r
和c
都是13.两者都不能大于12.它正在索引超出数组的边界,这是未定义的行为。