C语言编译提示cannot convert FILE* to const char*给printf的错误原因?
错误根因
printf 函数的第一个入参要求是 const char* 类型的格式字符串,你在循环中直接传入了 FILE* 类型的文件指针 p,二者类型完全不匹配,编译器无法完成隐式转换,因此抛出该报错。你需要输出的是从文件中读取到的字符 c,而非文件指针本身。
代码存在的其他潜在问题
- 没有对
fopen的返回值做判空处理,如果目标文件不存在、无读取权限,p会是NULL,后续操作会直接触发程序崩溃 getc函数的返回值是int类型,用char类型变量存储读取结果会导致无法正确识别EOF标记(如果编译器默认char为无符号类型,-1会被转换为255,永远不等于EOF,会进入死循环)main函数未声明返回值类型,不符合C标准规范
修正后的代码
#include<stdio.h> #include<conio.h> int main() { FILE *p; int c; // 改用int存储getc返回值 p = fopen("sach","r"); // 增加文件打开失败判断 if(p == NULL) { printf("文件打开失败"); return 1; } printf("\n File contents are:"); while((c = getc(p)) != EOF) { printf("%c", c); // 传入格式符和读取到的字符 } fclose(p); getch(); return 0; }
内容的提问来源于stack exchange,提问作者Sachin Jose
相关产品推荐
相关产品推荐

