如何在C中将2D字符串数组从函数返回到主函数? [警告]从不兼容的指针类型返回

时间:2019-12-09 06:28:28

标签: c arrays string return

这是我第一学期C编程课程的作业问题。

您已根据学生工作计划计划被录用。您的首要任务是编写一个C程序,以帮助该学院的一位教授为他/她的学生的期末考试评分。该考试包括20个多项选择题。每个问题都有四个可能的答案之一:A,B,C或D。程序将从文件中读取学生的答案和正确答案,并将结果打印到屏幕上,并输出文件。全班至少有15名学生。

我想做的是读取学生答案的文件,并使用函数将值存储在数组中,并将具有正确答案文件的内容存储在数组中,然后将两个数组都返回到主函数并发送给他们另一个功能比较答案。但是,在将字符串数组返回到主函数时遇到了麻烦。

这是我的代码:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>


//Modules
char** readstudent()
{
    FILE*s_ans;
    static char arrs[20][20];
    int i,j;
    s_ans=fopen("trial2.txt","r");

    if (s_ans == NULL)//check if file can be opened
    {
    printf("error student");
    }

    while(!feof(s_ans))
    {
        for(j=0;j<20;j++)
        {
            fscanf(s_ans,"%s",arrs[j]);
        }
    }
    printf("ReadStudent\n");
    for(i=0;i<20;i++)
    {
        printf("%d\t %s\n",i+1,arrs[i]);
    }

    return arrs;
}

char** readcorrect()
{
    FILE*c_ans;
    static char arrc[20][20];
    int x,i;;   
    c_ans=fopen("CorrectAnswers.txt","r");

    if (c_ans == NULL)//check if file can be opened
    {
    printf("error correct");
    }

    while(!feof(c_ans))
    {
        for(x=0;x<20;x++)
        {
            fscanf(c_ans,"%s",arrc[x]);
        }
    }
    printf("ReadCorrect\n");
    for(i=0;i<20;i++)
    {
        printf("%d\t %s\n",i+1,arrc[i]);
    }

    return arrc;
}

//Main
int main()
{
    int i,j,n,x;
    char **as_ans;
    char **ac_ans;

    as_ans=readstudent();
    ac_ans=readcorrect();

    printf("Main");
    for(i=0;i<20;i++)
    {
        printf("%s",as_ans[i]);
    }

    return 0;
}
}

编译后,出现两次“ [警告]从不兼容的指针类型返回”。

有人可以帮助我成功地将数组返回到主函数吗?请注意,这是我第一次处理C 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过动态创建二维数组来做到这一点,以使其不具有功能范围,然后从功能返回,如下所示:

char** func(){
    char **arrs = (char **)malloc(20 * sizeof(char *));
    ...
        // your logic
    ...
    return arrs;
}

使用后,您可以释放动态分配的二维数组的空间。