return 来自不兼容的指针类型?

return from incompatible pointer type?

我在return sarray 所在的行中收到来自不兼容指针类型的警告Return,这是为什么呢?我已经尝试了一段时间了。我还在行

中收到了不兼容指针类型的警告
( *iarray )[CHARACTER_LIMIT] = scanCode();

但我认为如果我修复了第一部分,那么修复这一部分会更容易。

#include <stdio.h>
#define MAX_WORDS 9054 //Scope variables
#define CHARACTER_LIMIT 6
#define MAX_TRIPLETS 3018


char** scanCode(void)  
{
    FILE *in_file;
    int i = 0;
    static char sarray[MAX_WORDS][CHARACTER_LIMIT];
    in_file = fopen("message.txt", "r");
    for(i=0; i<WORD_COUNT_MAX; i++)    {
        fscanf(in_file,"%s", sarray[i]);
    }

    return sarray;
    fclose(in_file);
}

int main(void)
{

    char ( *iarray )[CHARACTER_LIMIT] = scanCode();  

    while(1);
    return 0;
}

sarray是一个数组或多个数组,它可以衰减为指向数组的指针,但不能衰减为指向指针的指针。将 sarray 转换为 char** 应该是一个错误。

除此之外,scanCode() return 是指向 char 的指针。 iarray 是指向长度为 CHARACTER_LIMITchar 数组的指针。它们不是同一类型,编译器会警告您这一点。

您需要更改函数的 return 类型:

char (*scanCode(void))[CHARACTER_LIMIT] {
  ....
  return sarray;
}

此处,sarray 衰减为指向长度为 CHARACTER_LIMIT 的数组的指针。