2013-12-21 18 views
1

我試圖創建一個C程序獲取動態分配這樣的二維字符數組的函數功能:創建可獲取並返回一個二維動態分配

char **arr; 
int N, M; 
scanf("%d%d", &N, &M); 
arr = malloc(N * sizeof(char *)); 
if(arr == NULL) 
    { 
    printf("Not enough memory\n"); 
    exit(0); 
    } 
for(i = 0; i < N; i++) 
    { 
    arr[i] = malloc(M * sizeof(char)); 
    if(arr[i] == NULL) 
     { 
     printf("Not enough memory\n"); 
     exit(0); 
     } 
    } 

,然後返回該數組。我已經聲明瞭這樣的功能(在輸入代碼之前)。

char check(char **arr); 

然後,編輯功能,我已經開始這樣的:

check(**arr) { 
     /*code here*/ 
     return **arr; 
} 

,並調用功能,我用這個:

check(**arr); 

然而,當我嘗試用gcc -ansi -pedantic -Werror編譯它,我得到這些錯誤/警告:

file.c: In function ‘main’: 
file.c:42:2: error: passing argument 1 of ‘check’ makes pointer from integer without a cast [-Werror] 
    check(**arr); 
^
file.c:6:6: note: expected ‘char **’ but argument is of type ‘char’ 
char check(char **arr); 
    ^
file.c: At top level: 
file.c:57:7: error: expected declaration specifiers or ‘...’ before ‘*’ token 
check(**arr) { 
    ^
cc1: all warnings being treated as errors 

42行是當我像上面所說的調用主函數中的檢查函數時。 第6行是當我聲明檢查功能。 第57行是當我開始編輯像我上面所說的功能。

我知道我應該已經發布了所有的代碼,但它是一個學校作業,所以我不能。我知道這很煩人,我很抱歉,但使用我在終端中得到的錯誤,我試圖指出錯誤在哪裏。我再次抱歉,謝謝你的時間。

回答

1

你的函數調用是錯誤的。由於警告不言自明,所以check需要參數類型char ****arrdereferencing雙指針arr)類型爲char而不是char **
稱其爲

check(arr); 
+0

哇,謝謝,除了最後一個在第57行清除了很多錯誤。這是否意味着我必須輸入「check(char ** arr){」而不是「check(** arr){」 ? – VarimathrasXX

+1

@VarimathrasXX聲明param爲'char ** arr',就像'char check(char ** arr)'一樣'但是,我已經可以告訴你,你還需要傳遞size信息,'char檢查(char ** arr,int rows,int cols)' – WhozCraig

1

你已經聲明常用3的指針。所以當你把它叫做** arr時,它被解引用回char。調用它就像check(arr)等等,可能解決了你的問題。