当前位置: 首页 > news >正文

C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)

C++ 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 <cwchar>头文件提供有宽字符输入/输出能力的函数。

无格式输入/输出

从文件流获取字符

std::fgetc, 
std::getc

int fgetc( std::FILE* stream );
int getc( std::FILE* stream );

读取来自给定输入流的下个字符。

参数

stream-读取字符的来源

返回值

成功时为获得的字符,失败时为 EOF 。

若文件尾条件导致失败,则另外设置 stream 上的文件尾指示器(见 std::feof() )。若某些其他错误导致失败,则设置 stream 上的错误指示器(见 std::ferror() )。

 调用示例

#include <cstdio>
#include <cstdlib>int main()
{FILE* file = std::fopen("test.txt", "r");if (!file){std::perror("File opening failed");return EXIT_FAILURE;}int c; // 注意:是 int 而非 char ,要求处理 EOFwhile ((c = std::fgetc(file)) != EOF)   // 标准 C I/O 文件读取循环{std::putchar(c);}if (std::ferror(file)){std::puts("I/O error when reading");}else if (std::feof(file)){std::puts("End of file reached successfully");}std::fclose(file);return 0;
}

输出

从文件流获取字符串

std::fgets

char* fgets( char* str, int count, std::FILE* stream );

从给定文件流读取最多 count - 1 个字符并将它们存储于 str 所指向的字符数组。若文件尾出现或发现换行符则终止分析,后一情况下 str 将包含一个换行符。若读入字节且无错误发生,则紧随写入到 str 的最后一个字符后写入空字符。

count 小于 1 则行为未定义。亦不指定是否写入空字符,若 count==1 。

参数

str-指向 char 数组元素的指针
count-要写入的最大字符数(典型地为 str 的长度)
stream-读取数据来源的文件流

返回值

成功时为 str ,失败时为空指针。

若遇到文件尾条件导致了失败,则设置 stream 上的文件尾指示器(见 std::feof() )。这仅若它导致未读取字符才是失败,该情况下返回空指针且不改变 str 所指向数组的内容(即不以空字符覆写首字节)。

若其他错误条件导致了失败,则设置 stream上的错误指示器(见 std::ferror() )。 str 所指向的数组内容是不确定的(甚至可以不是空终止的)。

调用示例

#include <iostream>
#include <cstdio>
#include <cstdlib>int main()
{std::FILE* tmpf = std::tmpfile();std::fputs("Alan Turing\n", tmpf);std::fputs("John von Neumann\n", tmpf);std::fputs("Alonzo Church\n", tmpf);std::rewind(tmpf);char buf[8];while (std::fgets(buf, sizeof buf, tmpf) != NULL){std::cout << '"' << buf << '"' << '\n';}return 0;
}

输出

http://www.lryc.cn/news/165695.html

相关文章:

  • 多线程之间如何进行通信 ?
  • 二叉树顺序存储结构
  • Apache HTTPD 多后缀解析漏洞复现
  • 【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
  • 我的创作纪念日——1个普通网安人的漫谈
  • Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory
  • 期权交易策略主要有哪些?期权交易策略指南
  • 算法通关村第十四关——解析堆在数组中找第K大的元素的应用
  • 【报错】springboot3启动报错
  • 阿里云服务器配置怎么选择?小白攻略
  • 关于 RK3568的linux系统killed用户应用进程(用户现象为崩溃) 的解决方法
  • EasyPHP-Devserver-17安装和配置mantisBT
  • Python打包教程 PyInstaller和cx_Freeze
  • 用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做
  • SpringCloud Eureka搭建会员中心服务提供方-集群
  • 详解TCP/IP协议第二篇:OSI参考模型详解
  • OpenGL 函数列表
  • 【C语言】每日一题(半月斩)——day1
  • Spring MVC 七 - Locale 本地化
  • 力扣(LeetCode)算法_C++——替换后的最长重复字符
  • unity 编辑器时读取FairyGUI图集单个图像
  • 下载配置 maven并在 idea 上应用
  • 网站搭建从零开始(0)--域名的选择与解析
  • 数分面试题2-牛客
  • Android codec2 编码 -- 基于录屏
  • 【Java基础篇 | 面向对象】--- 聊聊什么是多态(上篇)
  • 如何使用 Node.js和Express搭建服务器?
  • 帮公司面试了个要25K的测试,我问了他这些问题...
  • Matlab之创建空数组的多种方法汇总
  • HTML实现移动端布局与页面自适应