如何从C中的函数返回2个dim char数组

时间:2017-01-10 01:33:32

标签: c

我有一些C代码可以用作:

int main(void)
{
   printf("Height: ");
   int height;
   do
   {
     height = get_int();
   } while (height < 0 || height > 23);

   char mtn[height][2*height+2];

   for(int i = 0;i <height+1;i++){
       for (int j = 0;j<2+height+3;j++){            
          mtn[i][j] = ' ';            
       }
   }    
}

但是想让double for循环成为一个函数,例如:

char space_mtn(int height);
int main(void)
{
  printf("Height: ");
  int height;
  do
  {
    height = get_int();
  } while (height < 0 || height > 23);

  char mtn[height][2*height+2];
  strcpy(mtn,space_mtn(height);

}

char space_mtn(int height){
char mtn[height][2*height+2];
for(int i = 0;i <height+1;i++){
    for (int j = 0;j<2+height+3;j++){            
        mtn[i][j] = ' ';            
    }
}

}

但它不起作用。

1 个答案:

答案 0 :(得分:1)

无法通过C中的值返回数组。一种方法是将数组作为参数传递。 (数组参数调整为指针,使其看起来好像数组已通过引用传递,因此该函数可以修改原始数组。)

void space_mtn(int height, char mtn[height][2*height+2])
{
    for(int i = 0;i < height;i++)
        for (int j = 0; j < 2*height+2 ;j++){           
            mtn[i][j] = ' ';            
}

int main(void)
{
    // ...
    char mtn[height][2*height+2];
    space_mtn(height, mtn);
}

注意,我调整了填充循环上的循环边界 - 它们是无意义的和/或写出界限。

此外,传递绑定到函数的运行时数组当然没有可用的编译时边界检查 - 因此您需要特别注意参数中的边界与要传递的数组匹配。