创建一个获取并返回动态分配的2D的函数

时间:2013-12-21 17:07:11

标签: c function

我正在尝试在C程序中创建一个函数,该函数获取一个动态分配的2D char数组:

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

然后返回该数组。我已经声明了这样的函数(在main中键入代码之前)。

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行是我在main中调用check函数的方式,如上所述。 第6行是我宣布检查功能的时候。 第57行是我开始编辑上述功能的时候。

我知道我应该发布所有代码,但这是一项学校作业,所以我不能。我知道这很烦人,我很抱歉,但是使用我在终端中遇到的错误我试图找出错误的位置。我再次感到抱歉,谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

您的函数调用错误。由于警告是自解释的,check期望char **类型的参数。 **arrdereferencing双指针arr)的类型为char而不是char **
将其称为

check(arr);

答案 1 :(得分:1)

您已将arr声明为指针。因此,当您将其称为** arr时,它会被取消引用回到char。将其称为check(arr)等,可能会解决您的问题。