我如何让fputc函数在windows 11上工作?[已关闭]

h79rfbju  于 2023-01-20  发布在  Windows
关注(0)|答案(1)|浏览(139)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我正在尝试一个非常简单的程序,无论是写在test.txt得到复制到up.txt,但在大写字母。我正在使用开发c++在windows 11和运行程序后,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 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;
}

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

y1aodyip

y1aodyip1#

这段代码不可能在任何平台上运行。你确定你在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 FILE指针,这是一个未定义的行为,很可能程序会崩溃,或者什么都不做,或者退出,或者其他什么)。在你喜欢的搜索引擎上查找“C未定义行为”。
还有一个微妙的缺陷:char x;应该是int x;,因为fgetc返回的是int,而不是char
阅读以下文章了解更多信息:

相关问题