博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C IO(一般性)
阅读量:5052 次
发布时间:2019-06-12

本文共 1927 字,大约阅读时间需要 6 分钟。

input
int fgetc ( FILE * stream ); int getc ( FILE * stream );int getchar ( void ); 
fgetc返回文件指针当前指定的字符,内部文件pos指向下一个字符。如果流到达了文件结果,函数将返回EOF(一般定义为-1,而字符类型是unsigned char,所以只能用int接收)
getc与fgetc作用一样,区别在于getc有可能实现为宏,因此,如果需要获得高效率,优先使用getc,如果需要传递文件指针,使用fgetc,因为宏是无法获取指针的。
getchar 文档定义为It is equivalent to calling  with  as argument
你也可以认为他是这样实现的
int getchar ( void ){    return getc(stdin);}
需要注意的是,这三个方法是运行于行缓冲模式的。行缓冲的输入结束判定为:要么行缓冲已满,要么遇到回车符。
而且这些函数不对内容进行处理,意思就是说当你键入1个字符并回车的时候,缓冲区里面其实是有两个字符的,一个是你输入的字符,一个是回车,回车是不会被丢弃的,在
下一次调用获取字符函数的时候,会当作字符返回。所以如果要获得你想要的输入,应该调用一个额外的getc丢弃回车符。(组织好差)
 
char * fgets ( char * str, int num, FILE * stream );char * gets ( char * str )
fgets从stream中获取字符,并在一下任一情况发生时停止:
1.读到新行
2.读完num-1个字符
3.读到文件结尾
并会设置地num个字符为\0.
 
也就是说fgets也是行缓冲的,也会遇到下面这种情况
 
myfile.txt
******************
12345678
test
******************
myfile.txt共有两行。
 
test.c
 
#include 
#include
int main (){ FILE * file = fopen("myfile.txt","r"); char content[9]; fgets(content,9,file); printf("%s",content); fgets(content,9,file); printf("%s",content); system("pause"); return 0;}
输出为:
12345678请按任意键继续. . .
也就是第二次只会读取一个回车换行。
 
gets和fgets区别较大:
1.gets是从stdin读取
2.gets虽然也是遇到回车换行停止读取,但是它不会把回车换行放入读取的字符串中
3.没有指定str的长度。
第三点可能造成str的溢出,曾经被haker利用过。c11已经移除gets并用gets_s取代了gets
gets_s原型如下:
char*gets_s(char*str, rsize_t n );
 
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
fread是基于全缓冲的,也就不会说遇到换行就结束读取之类的。
 
output
int fputc ( int character, FILE * stream );int putc ( int character, FILE * stream );int putchar ( int character );
 
这几个方法没有什么好讲的,和输入不同,没有额外的限制。putc也是可能实现为宏。
 
int fputs ( const char * str, FILE * stream );int puts ( const char * str );
这两个函数的区别在于fputs不会将\0输出。而puts会在str后面自动加一个\n
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
buffer 是一个指针,指向要写入文件中的信息快。count的值指出要写多少项。返回写入项的数目,这个值永远等于count,除非操作失败。

转载于:https://www.cnblogs.com/dxnbd/p/3336719.html

你可能感兴趣的文章
2018.11.15 Nginx服务器的使用
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
数据结构之查找算法总结笔记
查看>>
Android TextView加上阴影效果
查看>>
C#:System.Array简单使用
查看>>
「Foundation」集合
查看>>
类模板 - C++快速入门45
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>