C语言 如何使fputc功能在windows 11上工作?



我正在尝试一个非常简单的程序,在test.txt中编写的任何内容都可以在up.txt中复制,但以大写字母。我在windows 11上使用dev c++,运行程序后创建了up.txt文件,但它是空的,我不知道为什么。

#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 errorn");
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;
}

我在linux上成功地尝试了相同的程序,但我不确定为什么它在windows上不起作用

这段代码不可能在任何平台上运行。您确定在Linux上运行的代码实际上与问题中显示的代码完全相同吗?

主要问题在这里:

fpout=fopen("up.txt","w");
// up.txt is now created
if (fpout = NULL) {   // you're using an assignment here (=) instead 
// of the == operator
fprintf(stderr,"write error/n");
exit(667);
}
// fpout is NULL now

if (fpout = NULL)不是比较,只是简单地将NULL赋值给fout。由于结果是false(它或多或少与NULL相同),fprintf(stderr,"write error/n");exit(667)将不会被执行,程序只是继续。

然后在接下来的while循环中,您正在写入NULL文件指针,这是未定义的行为,最有可能的是程序会崩溃,或者它可能什么都不做或只是退出,或者可能是别的什么)。查找&;C未定义的行为&;在你最喜欢的搜索引擎


还有一个微妙的错误:char x;应该是int x;,因为fgetc返回的是int,而不是char

阅读以下文章获取更多信息:

  • 为什么fgetc()返回int而不是char?
  • C中int、char和EOF的混淆

最新更新