简单C函数的奇怪行为

时间:2013-01-30 14:16:22

标签: c arrays pointers

我有2个简单的函数,NxM数组中的一个函数输入不包括N + 2和M + 2。因此原始数组必须用零包围,另一个输出整个数组。当调用out函数时,我有一个非常奇怪的输出:

enter image description here

但是当我将代码移动到main函数时,一切都很好。我尝试在CodeBlocks和NetBeans中编译这段代码.Behaviour是一样的。 我不知道那里发生了什么。有人可以解释一下吗?

.....
int main()
{
int array[N+2][M+2]={{0}};

local_in(N,M,array);
local_out(N,M,array);

return 0;
}

void local_in(int len, int len2,int arr[][len2])
{
   int i;
   int j;

   for(i = 1; i <= len; i++)
     for(j = 1; j <= len2; j++){
          scanf("%d",&arr[i][j]);

    } 

}
void local_out(int len, int len2,int arr[][len2])
{
   int i;
   int j;

  for(i = 0; i < len+2; i++){
    for(j = 0; j < len2+2; j++)
            printf("%d ",arr[i][j]);
    printf("\n");
  } 
}

1 个答案:

答案 0 :(得分:4)

您的local_*函数将数组作为int arr[][len2]传递;但应改为使用int arr[][len2+2]

通常,如果您传递了正确的数组维度,那么代码应该更加清晰,然后实现在local_*函数内读取或写入项目的任何策略。