从不兼容的指针类型返回?

时间:2015-12-08 20:03:11

标签: c arrays pointers 2d

我收到警告从不兼容的指针类型返回到我返回sarray的行,为什么呢?我一直试图想出一段时间..我也在行

中收到不兼容指针类型的警告
( *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;
}

1 个答案:

答案 0 :(得分:2)

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

除此之外,scanCode()返回指向char的指针。 iarray是指向长度为char的{​​{1}}数组的指针。这些类型不同,编译器会向您发出警告。

您需要更改函数的返回类型:

CHARACTER_LIMIT

此处,char (*scanCode(void))[CHARACTER_LIMIT] { .... return sarray; } 衰减到指向长度为sarray的数组的指针。