簡體   English   中英

如何從C中的函數返回2個昏暗的char數組

[英]how to return 2 dim char array from function in 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] = ' ';            
    }
}

}

但它不起作用。

數組不能通過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);
}

注意,我調整了填充循環上的循環邊界-它們是無用的和/或超出邊界的。

同樣,傳遞給函數的運行時數組當然沒有可用的編譯時邊界檢查-因此,您需要格外小心,以確保參數中的邊界與傳遞的數組匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM