int fgetc()!

编译器char 为有符号,读二进制文件时:

    fgetc()的原型为,int fgetc(FILE *stream);返回的为int型数据,而非char

   当到达文件尾或出错时返回-1,而其它情况返回的一律一正数!

   如果之前向文件写了任何负的char,返回的也为正数

   返回的数为:直接读得的8位0/1转化成一无符号的int,例如:0xff 对应255(不是-1)

   因此返回的值范围为0--255,个数为2^8个,算上到达文件尾的-1,共2^8+1个,比8位0/1所能表示的最大信息个数2^8多一个,用来说明是否到达文件尾或出错

   之前向文件写了负的char时:fgetc()返回其补码对于的无符号正数,但我们经常char c=fgetc(),此时int转化成char,之前的负数就将回来。如果先前写了-1,fgetc()返回255,毫无疑问后来c=-1,但如果到达文件尾或出错fgetc()返回-1,char c=fgetc()后c也将变成-1。两种情况c都将为-1!因此char c=fgetc();c==-1时我们不能判断是到了文件尾,还是读得的数据为-1。例如:读文件通过char c;  while((c=fgetc(p))!=-1){/*other codes*/}判断文件尾时可能在文件还没有读完时就停止,而正确的做法应当char c;int m;while((m=fgetc(p))!=-1){c=m;/* other codes*/},当然判断文件尾也可以使用feof()等

   简而言之:fgetc()返回-1时并不是真的读到了-1(0xff),而是真的到了文件尾或出错了,当读到了-1(0xff)时它也不返回-1,而如果char c=fgetc(),只观察c的值将使得刚才的两种情况合并

 

 

 

  

 

  

 

 

转载于:https://www.cnblogs.com/feix760/archive/2011/12/26/2302682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值