读书人

fgetc和fputc读写文件小弟我定义cha

发布时间: 2013-04-20 19:43:01 作者: rapoo

fgetc和fputc读写文件,我定义char为什么不行?
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE *fin,*fout;
fin=fopen("c:\\abcd.ppt","rb");
fout=fopen("d:\\efgh.ppt","wb");
int c;//这个地方如果定义成char为什么不行?,新的efgh文件打开会报错
while((c=fgetc(fin))!=EOF)
fputc(c,fout);
fclose(fin);
fclose(fout);
return 0;
}

[解决办法]
因为fgetc是逐字节读取文件到unsigned char中, 并对unsigned char做类型转换到int返回的, 这保证了int一定是>=0的, 从而达到了与返回EOF(-1)通知用户文件末尾进行严格区分.

如果楼主硬要用char来接受fgetc的返回值, 那么如果文件中包含0xff字节, 那么fgetc返回0x000000ff这个int给用户的char后, 截断存入到用户的char后值为0xff, 等于-1, 即EOF, 导致用户无法区别是0xff字节还是EOF.
[解决办法]
虽然楼上的大神已经说的很清楚了。
但我还是想说一句:fgetc()函数的返回类型不就是int嘛。。。

读书人网 >C语言

热点推荐