- 论坛徽章:
- 0
|
c语言 关于文件的两个问题
感谢 老K wl820406 win_hate
前天一大早起来,一照镜子,脸胖了@_@,仔细一看左脸肿了 到医院检查有坏牙要补牙,先消炎消肿之后再拍片,再根据情况是补还是拨 还好神经已经坏掉,倒还不痛
"情况1,如果把 c 定义为 char,则读文件有可能意外终止,如果其中包含 0xff 字符。
情况2,如果把 c 定义为 uchar,则陷入死循环。编译器应该有警告。
情况3,如果把 c 定义为 int 则一切正常。"
今天对上面几种情况一一测试:
平台:win2k -tc 源文件:带有0xFF的11字节大小的fputc1.dat
代码:
#include "stdio.h"
int test(void)
{int n;
char c;
FILE *fp2,*fp3;
if((fp2=fopen("f:\\tc\\fputc\\fputc1.dat","rb")==NULL) return 1;
if((fp3=fopen("f:\\tc\\fputc\\fputc3.dat","wb")==NULL) return 1;
while((c=fgetc(fp2))!=EOF) fputc(c,fp3);
fclose(fp2);
return 0;
}
main()
{
if(test())
{printf("File not sussfull create!\n"
return 0;
}
else printf("File already sussfull create!\n"
}
情况1: 运行n次,也不会产生什么问题!但是如果改一下代码
while((c=fgetc(fp2))!=EOF) fputc(c,fp3);为while(!feof(fp2)) fputc(fgetc(fp2),fp3);一运行我还以为死机了呢,结果产生了一个180多M的文件如图2所示
写进入两个FF,能理解,但为什么只写了180多M剩下40多M,没有把的F盘写满呢?判断条件没有改变,程序运行中间怎么就停止不写了?
情况2:char c;定义为unsigned char c;
while((c=fgetc(fp2))!=EOF) fputc(c,fp3);代码,程序铁定死掉 结果如图3
while(!feof(fp2)) fputc(fgetc(fp2),fp3);代码,不会死掉 结果如图4
情况3: 使用int c;定义 注意运行结果图5与图1的差别,图5中把fput1.dat文件中的FF同时复制到fput3.dat文件中,而图1中使用char c;则没有把FF复制到fput3.dat中。难道文件已经存在的FF和文件本身后面的EOF不是一回事?还要再想想 |
|