c - 如何从C中的函数返回2个暗淡字符数组

标签 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] = ' ';            
       }
   }    
}

但想让双 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] = ' ';            
    }
}

}

但它不起作用。

最佳答案

在 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);
}

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

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

关于c - 如何从C中的函数返回2个暗淡字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559811/

相关文章:

c - Valgrind:条件跳转或移动取决于未初始化的值(指针的指针)

c - 引用 union 中的变量

c - 如何以小端顺序发送数据 C

c - 将文件 'filename' 读入字符缓冲区 'text'

c - 如何使用C程序进入网络命名空间并读取文件内容

c++ - 断言释放 C++ 中的内存

c - OCaml 微基准测试

c - C中的向后递归打印

c++ - C 和 C++ 中的二维数组差异

不应该循环的代码(带 fork )正在循环