为何C语言中getc函数未返回正确整数值?
问题原因分析
你的代码出现问题有两个核心原因:
- 文件打开模式错误:你用
"w"模式打开文件,这个模式是只写模式,不允许进行读操作。在只写流上调用getc()属于未定义行为,返回的0是不可预期的随机结果,不是有效字符值。 - 文件位置指针未重置:哪怕你用了正确的读写模式,写完字符后,文件位置指针会停在文件末尾,此时直接读会读取到
EOF(值为-1),也读不到刚写入的内容。
修正方案
- 改用支持读写的打开模式,比如
"w+":这个模式会创建/清空文件,同时允许后续的读写操作。 - 写完内容后,用
rewind()或fseek()重置文件位置指针到文件开头,这样才能读取刚写入的内容。
修正后的代码示例
#include <stdio.h> int main(){ FILE *pointer_to_text; // 改用w+模式,支持读写 pointer_to_text = fopen("kot.txt","w+"); if (pointer_to_text == NULL) { // 增加错误判断,避免空指针操作 perror("Failed to open file"); return 1; } fprintf(pointer_to_text,"%c",'c'); // 重置文件指针到开头 rewind(pointer_to_text); // 也可以用 fseek(pointer_to_text, 0, SEEK_SET); int c = getc(pointer_to_text); printf("%d\n",c); // 补全换行符的转义 fclose(pointer_to_text); return 0; }
运行这段代码会输出99(字符'c'的ASCII值),符合预期。
内容的提问来源于stack exchange,提问作者Jiommy
相关产品推荐
相关产品推荐

