2015-12-08 4 views
0

Я получаю предупреждение Возвращение из несовместимого типа указателя в строке, где я возвращаю саррей, почему же? Я пытался выяснить, на некоторое время теперь .. Я также получаю предупреждение для несовместимого типа указателя в строкевозврат из несовместимого типа указателя?

(*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; 
} 
+0

Ваша копия/вставка вашего кода либо сломана, либо ваш фактический код - ваше потерянное ключевое слово for на этой строке: (i = 0; i

+0

Чтобы быть ясным, это ошибка. Некоторые компиляторы сообщают о ошибках как «предупреждение» по неясным причинам. –

+0

[Массив массивов - это не то же самое, что указатель на указатель] (http://stackoverflow.com/questions/18440205/casting-void-to-2d-array-of-int-c/18440456#18440456) , –

ответ

2

sarray представляет собой массив или массивы, которые могут распадаться на указатель на массив, но не указатель на указатель. Преобразование sarray в char** должно быть ошибкой.

Кроме того, scanCode() возвращает указатель на указатель char. iarray является указателем на массив char с длиной CHARACTER_LIMIT. Это не тот же тип, и компилятор предупреждает вас об этом.

Вы должны изменить либо тип возврата функции:

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

Здесь sarray распадается на указатель на массив длины CHARACTER_LIMIT.

+1

@ M.M Строго говоря, 'char (* scanCode (void)) [CHARACTER_LIMIT]'. – szczurcio

+0

@ M.M Исправлено. Не так уж часто я пишу такой прототип функции! – juanchopanza

+0

Я сделал изменения char (* scancode()) [CHARACTER_LIMIT] scanCode (void) и оба возвращают sarray; и возвращение и саррей; но никто из них не работает? – digeridoo

Смежные вопросы