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

在C语言中,如何将2D字符串数组从函数返回到主函数?[警告]从不兼容的指针类型返回,c,arrays,string,return,C,Arrays,String,Return,这是我第一学期C编程课程的作业问题 你是根据学生工作计划受雇的。您的第一项任务是编写一个C程序,以帮助教员中的一位教授为其学生的期末考试评分。这次考试由20道选择题组成。每个问题有四个可能答案中的一个:A、B、C或D。程序将从文件中读取学生的答案和正确答案,并将结果打印到屏幕上以及文件输出。班上至少有15名学生 我想做的是读取学生答案文件,并使用函数和正确答案文件将值存储在数组中,然后将两个数组返回到主函数并发送到另一个函数以比较答案。但是,我在将字符串数组返回到主函数时遇到了问题 这是我的代码

这是我第一学期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;
}
}
#包括
#包括
#包括
#包括
//模块
char**readstudent()
{
文件*s_ans;
静态字符arrs[20][20];
int i,j;
s_ans=fopen(“trial2.txt”、“r”);
if(s_ans==NULL)//检查文件是否可以打开
{
printf(“错误学生”);
}
而(!feof(s_ans))
{

对于(j=0;j可以通过动态创建二维数组来实现,这样它就没有函数的作用域,然后从函数返回,如下所示:

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

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

在应用您所说的内容后,您可能还想好好阅读。我的函数编译时没有错误也没有警告,但执行是空的。@marwandiabe显示了您如何从这种类型的二维数组中插入和读取元素。这可能是问题所在,但我希望您清楚地了解您的原始问题,即
如何从数组返回二维字符串