fgetc读取文件返回值始终为255的技术问题求助
问题分析与解决方案
嘿,我一眼就揪出问题所在啦,咱们一步步拆解清楚:
核心问题根源
- 文件指针位置错误:你用
w+模式打开文件后,先执行了写入操作,写完之后文件指针会停在文件末尾。这时候直接调用fgetc读取,自然会读到EOF(文件结束标志)。 - 返回值类型不匹配:
fgetc的返回值是int类型——它要么返回读取到的字符(转成unsigned char再转int),要么返回EOF(值为-1)。你把它存在unsigned char里,-1会被强制转成255,这就是你看到固定返回255的原因。
修正后的代码
#include <stdio.h> // 注意:尽量不要直接#include .c文件,应该引用对应的头文件.h #include "anotherCFile.h" int main(int argc, char **argv) { int ch; FILE* filePointer; filePointer = fopen("text.txt", "w+"); // 别忘了加文件打开失败的判断!避免空指针操作崩溃 if (filePointer == NULL) { perror("Failed to open file"); return 1; } ch = fgetc(stdin); while (ch != EOF) { fputc(ch, filePointer); ch = fgetc(stdin); } // 关键操作:写完后把文件指针移回文件开头 rewind(filePointer); // 也可以用fseek(filePointer, 0, SEEK_SET); 效果完全一致 int ch1 = fgetc(filePointer); // 用int接收,才能正确识别EOF if (ch1 != EOF) { printf("%c", ch1); } else { printf("Reached end of file"); } fclose(filePointer); return 0; }
额外小提醒
- 永远要检查
fopen的返回值,如果文件打开失败(比如权限不足、路径错误),filePointer会是NULL,不判断的话后续操作直接崩溃。 - 不要直接
#include .c文件,这会导致代码重复编译,正确做法是把函数声明放在.h头文件里,.c文件实现逻辑,主文件只引用头文件。
内容的提问来源于stack exchange,提问作者J. Doe




