Windows 11下fputc函数失效?C语言文件转大写复制程序排障
问题分析与修复
你的程序在Windows 11下运行后输出文件为空,核心是两个语法错误导致程序提前退出,且错误提示未正常显示:
赋值操作误用作条件判断
打开输出文件后的判断语句if(fpout=NULL)是致命错误:这里是把NULL赋值给fpout,而非判断文件指针是否为空。这会让程序直接进入错误分支执行exit(667),但因为错误提示的换行符写错,你没看到报错,误以为程序正常运行,最终输出文件仅被创建就终止,所以是空的。正确写法应为if(fpout == NULL)。错误的换行转义符
错误提示字符串里的"write error/n"是错误的,换行转义符应该是\n,/n无法触发换行,导致错误信息无法正常显示在控制台,你也就没察觉到程序提前退出的问题。
修复后的完整代码:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(){ FILE *fpin, *fpout; char x; fpin=fopen("test.txt","r"); if(fpin==NULL){ fprintf(stderr,"read error\n"); exit(666); } fpout=fopen("up.txt","w"); if(fpout == NULL){ fprintf(stderr,"write error\n"); exit(667); } while((x=fgetc(fpin))!=EOF){ fputc(toupper(x),fpout); } fclose(fpin); fclose(fpout); return 0; }
额外注意:Windows下Dev-C++编译的程序,默认会在项目目录或可执行文件所在目录寻找test.txt,确保该文件存在且路径正确。
内容的提问来源于stack exchange,提问作者sartttt
相关产品推荐
相关产品推荐

