c - 简单的 C 函数的奇怪行为

标签 c arrays pointers

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

enter image description here

但是当我将代码移至主函数时,一切都很好。我尝试在 CodeBlocks 和 NetBeans 中编译此代码。行为是相同的。 我不知道那里发生了什么事。有人可以解释一下吗?

.....
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");
  } 
}

最佳答案

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

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

关于c - 简单的 C 函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606141/

相关文章:

objective-c - Xcode 中获取随机垃圾值的原因

c - C 中的 Printf 混淆

c - 初始化 union 类型的二维数组(整数或字符)

c - 函数指针会使程序变慢吗?

c++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

c++ - 带 pic18f445k22 的 7 段显示数字时钟

java - 将 T[](其中 T 是 Byte[])返回到 Byte[]

c++ - 递归模板函数在初始化时导致负数组大小

c - 在 C 中将数组作为参数传递

c - void 元素上的指针减法