- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是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上不起作用
1条答案
按热度按时间y1aodyip1#
这段代码不可能在任何平台上运行。你确定你在Linux上运行的代码实际上和你在问题中显示的代码完全一样吗?
主要问题就在这里:
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
。阅读以下文章了解更多信息: