fgets函数 和 fputs函数

简介:

  char *fgets(char *s, int size, FILE *stream);

功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:
        返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NUL

fgets函数,参数s是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个'\0'组成完整的字符串。

fgets()函数中,第一个参数指针需要我们事先分配好大小。另外,fgets()函数不适合取二进制的文件,这样,容易发生错误。

注:fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。

1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。

2.每次调用,fgets都会把缓冲区的最后一个字符设为null,这意味着最后一个字符不能用来存放需要的数据,所以如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1

3. 由结论1可推出:给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。

注意,对于fgets来说,'\n'是一个特别的字符,而'\0'并无任何特别之处,如 果读到'\0'就当作普通字符读入。如果文件中存在'\0'字符(或者0x00字节),调用fgets之后就无法判断缓冲区中的'\0'究竟是从文件读上 来的字符还是由fgets自动添加的结束符,所以fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有 '\0'。

#include

int fputs(const char *s, FILE *stream);
        int puts(const char *s);

返回值:成功返回一个非负整数,出错返回EOF

fputs向指定的文件写入一个字符串,puts向标准输出写入一个字符串。

缓冲区s中保存的是以'\0'结尾的字符串,fputs将该字符串写入文件 stream,但并不写入结尾的'\0'。与fgets不同的是,fputs并不关心的字符串中的'\n'字符,字符串中可以有'\n'也可以没有' \n'。puts将字符串s写到标准输出(不包括结尾的'\0'),然后自动写一个' \n'到标准输出。









本文转自 ye小灰灰  51CTO博客,原文链接:http://blog.51cto.com/10704527/1763098,如需转载请自行联系原作者
目录
相关文章
|
网络协议 Linux
SNAT和DNAT原理及应用
SNAT和DNAT原理及应用
2202 0
SNAT和DNAT原理及应用
|
机器学习/深度学习 算法 数据挖掘
神经网络训练失败的原因总结 !!
神经网络训练失败的原因总结 !!
552 0
|
7月前
|
供应链 监控 搜索推荐
RFID在智能制造起到至关重要的作用
在智能制造快速发展的背景下,RFID技术广泛应用于生产、质检、供应链等多个环节,实现物料追踪、生产监控、质量追溯与智能配送,助力制造业向高效化、信息化和智能化转型。
|
4月前
|
人工智能 数据安全/隐私保护
AI生成的痕迹:我们如何检测机器撰写的文本
AI生成的痕迹:我们如何检测机器撰写的文本
1417 117
|
2月前
|
人工智能 自然语言处理 机器人
AI也会说谎?揭秘可靠RAG让智能助手不再胡说八道
你的AI助手老是答非所问、胡编乱造?别急,可靠RAG技术专治各种"AI幻觉症"!通过文档相关性检查、幻觉检测和来源追溯,让你的智能客服从"胡说八道王"变身"靠谱答题员" #人工智能 #RAG #智能客服 #幻觉检测
246 1
|
10月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
423 12
|
11月前
|
Linux Python
centos 编译安装 python 和 openssl
centos 编译安装 python 和 openssl
712 2
|
开发者 Python
新手困扰?该如何了解github的热门趋势和star排行?
新手困扰?该如何了解github的热门趋势和star排行?
1320 0
|
Web App开发 算法 安全
什么是阿里云WoSign SSL证书?_沃通SSL技术文档
WoSign品牌SSL证书由阿里云平台SSL证书合作伙伴沃通CA提供,上线阿里云平台以来,成为阿里云平台热销的国产品牌证书产品。
2909 2
|
机器学习/深度学习 传感器 人工智能
《C++与人工智能在工业自动化故障诊断中的“智慧融合”大揭秘》
在工业自动化中,C++与人工智能的结合实现了智能故障诊断。C++高效处理传感器数据,构建并优化AI模型,实时监控设备状态,精准识别故障,保障生产稳定。未来,这一技术组合将在边缘计算和5G等新技术推动下,开启工业自动化的新篇章。
292 11

热门文章

最新文章