【C/C++】C语言中一些容易被人忽略的东西 之六 【文件读写,y上两点】

转载请注明出处

由于阅历有限,篇幅不周之处还望指出,谢谢

一、EOF教学陷阱(EOF=-1=0XFF=CTRL+Z)

刚开始学习编程的时候,看到

While Not Eof(1)
'DoSomething
Wend

这样的代码,在文件读取的时候用着会很爽,爽到忘我。

但是EOF其实并不是这么简单而已,

书本上说的,老师教的说只是带你入门,所以不会讲得很全面。这样的细节往往很容易让你犯下错误。


总所周知,#define EOF (-1)

初学的时候,文件读写的是文本文件,所以这类问题很难去关注。

但是,读取二进制文件的时候,EOF=-1就需要谨慎使用。


-1是一个字节的,也就是无符号整数255

那么,在二进制读写的时候,难免遇到有的变量的某个字节里有一个255.

这时候,如果使用while(!eof(fp))就不能正确的读写

所以我们要使用feof这个函数

#define _IOEOF          0x0010
#define feof(_stream)     ((_stream)->_flag & _IOEOF)

看看EOF的真面目:

  将DOC文件用记事本打开会看到很多这个玩意儿。

将255写入文件当中,然后用记事本打开,就这样子了,长得还不错,呵呵。由于粘贴不上来,所以这么截图了。

我似乎想起了GSM通信中的CTRL+Z...呵呵。

置于EOF其它相关的应用,朋友们可以搜索其它博文,此处不再赘述


二、有争议的fflush(stdin)

内容可以看百度百科


三、fgets注意点

第二个参数n......实际读入的是n-1个字符,最后一个留给了'\0'。


四、文件复制注意点

在写单字节循环复制文件的程序时,有可能会这么写:

	while(!feof(fsrc)){

		ch=fgetc(fsrc);
		fputc(ch,fdst);
	}
编译通过,但是实际复制的时候,会发生点小问题,dst文件会多出一个字节,值为255,也就是EOF(在文件流中)

而这样写就会原封不动不增不减地复制文件:

	while(1){

		ch=fgetc(fsrc);	//读取完最后一个字符才会产生eof标记(在指针结构中)
		
		if(!feof(fsrc))
			fputc(ch,fdst);
		else
			break;
	}






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值