从C中的不兼容指针类型[默认启用]警告返回

时间:2013-01-19 08:10:19

标签: c gcc incompatibility

当我调用此函数时

 4 char *file_reader(FILE *fp, char *file_name, const char *mode) {
  5     char *buffer;
  6     fp = fopen(file_name, mode);
  7 
  8     if (fp != NULL) {
  9         fseek(fp, 0L, SEEK_END);
 10         long s = ftell(fp);
 11         rewind(fp);
 12         buffer = malloc(s);
 13         if (buffer != NULL) {
 14             fread(buffer, s, 1, fp);
 15             fclose(fp);
 16             fp = NULL;
 17         }
 18         if (fp != NULL)
 19             fclose(fp);
 20     } else {
 21         printf("No such file.\n");
 22         return "ERR";
 23     }
 24     return buffer;
 25 }

通过

 char *file_content = file_reader(fp, input_file, "r");

gcc继续抱怨return from incompatible pointer type [enabled by default],但我没有看到任何不兼容的指针类型。任何人对此都有任何想法,谢谢。

3 个答案:

答案 0 :(得分:0)

作品。用-Wall -Werror -Wextra -pedantic -std=c11编译。

#include "stdio.h"
#include "stdlib.h"
FILE* fp;
char* input_file = "asdf.txt";
char *file_reader(FILE *fp, char *file_name, const char *mode) {
    char *buffer;
    fp = fopen(file_name, mode);
    if (fp != NULL) {
        fseek(fp, 0L, SEEK_END);
        long s = ftell(fp);
        rewind(fp);
        buffer = malloc(s);
        if (buffer != NULL) {
            fread(buffer, s, 1, fp);
            fclose(fp);
            fp = NULL;
        }
        if (fp != NULL)
            fclose(fp);
    } else {
        printf("No such file.\n");
        return "ERR";
    }
    return buffer;
}
int main() {
    char *file_content = file_reader(fp, input_file, "r");
    printf("%s\n", file_content);
    return 0;
}

答案 1 :(得分:0)

这听起来像是在你拨打电话时缺少file_reader()的原型。没有原型,int被假定为函数的返回类型。

要解决此问题,您应该将函数的原型放在标题中然后包含它,或者在调用之前手动编写原型。所以你需要这个:

char *file_reader(FILE *fp, char *file_name, const char *mode);

file_reader()的另一个问题是您忘记了file_name参数const

答案 2 :(得分:0)

"不兼容的指针类型"是常量字符串的一个" ERR"