当我调用此函数时
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]
,但我没有看到任何不兼容的指针类型。任何人对此都有任何想法,谢谢。
答案 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"