1

当我调用这个函数时

 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],但我没有看到任何不兼容的指针类型。任何人对此有任何想法,谢谢。

4

3 回答 3

0

“不兼容的指针类型”是常量字符串“ERR”的一种

于 2013-01-20T00:14:49.827 回答
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;
}
于 2013-01-19T08:18:20.917 回答
0

这听起来像是在您进行调用时缺少 file_reader() 的原型。如果没有原型,int则假定为函数的返回类型。

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

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

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

于 2013-01-19T08:18:56.063 回答