簡體   English   中英

將2d數組char傳遞給函數

[英]Passing 2d array char into function

我正在嘗試將帶有字符串的2D數組傳遞給函數。 我在令牌之前一直得到預期的表達式。

這段代碼的重點是閱讀wordsearch拼圖,然后找到拼圖中的單詞。 我將編寫一個函數用於前向搜索,后向搜索,然后上下搜索。

我該如何擺脫這個錯誤? 錯誤在我稱之為前向功能的最底部。

    /*Andrea Hatfield CPE 101 October 31st, 2012*/
    #include <stdio.h>
    #include <string.h>

    int forward(char words[][8], char puzzle[][11]);


    int main()
    {
    char puzzle[11][11];
    char words[8][8];
    FILE *fin, *fwords;
    int i = 0;
    int j= 0;

    fin = fopen("puzzle.in", "r"); 
    fwords = fopen("words.in", "r");


    if(fin == NULL) /*Reads in the puzzle file*/
    printf("File does not exist");
    else
    {
            while(fscanf(fin,"%s", puzzle[i])!=EOF)
            {
                    printf("%s\n", puzzle[i]);
                    i++;
            }


    }

    if(fwords == NULL) /*Reads in the words the puzzle will search for */
    printf("File does not exist");
    else
    {
            while(fscanf(fwords, "%s", words[j])!=EOF)
            {
                    printf("%s\n", words[j]);
            }
    }


    forward(&words[][8], &puzzle[][11]); /*Error at this point*/
    return(0);
    }

得到你想要的東西有點難,但這里有一個問題:

forward(&words[][8], &puzzle[][11]);

試試這個:

forward(words, puzzle);

以下是另外兩個應該從這里提到的選項:

#define ROWS 4
#define COLS 5

void func(int array[ROWS][COLS]) {
  int i, j;

  for (i=0; i<ROWS; i++) {
    for (j=0; j<COLS; j++) {
      array[i][j] = i*j;
    }
  }
}

void func_vla(int rows, int cols, int array[rows][cols]) {
  int i, j;

  for (i=0; i<rows; i++) {
    for (j=0; j<cols; j++) {
      array[i][j] = i*j;
    }
  }
}

int main() {
  int x[ROWS][COLS];

  func(x);
  func_vla(ROWS, COLS, x);
}

你需要直接打電話

 forward(words, puzzle);

但是,你的代碼中有一個錯誤:你在讀取words過程中忘記了j++ ,所以你要覆蓋words[0]而不是初始化數組的其他成員。

此外,在實際情況中,您可能會發現在運行時選擇數組大小是可取的。 一個簡單的方法是為寬度和高度選擇一個相當大的限制,並使用0x90的解決方案(你需要一個30x20的拼圖,你可以很容易地處理它,因為你用ROWS和COLS編譯等於,比方說, 1024)。

更復雜的方法是使用malloc() (使用指向字符的指針)並動態分配兩個數組,受可用內存的限制; 然后,您將其尺寸傳遞給forward功能。

int forward(char **words, char **puzzle, size_t w_w, size_t w_h, size_t p_w, size_t p_h)
{

}

然而,考慮到對malloc()的循環調用以及每次檢查其返回值以攔截內存不足情況的需要,分配部分會更復雜; 此外,在某些情況下,你可能要被取消分配的內存(例如運行反復的難題),從而導致進一步的復雜性。

暫無
暫無

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

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