IO接口 2月5日学习笔记
1.fgetc
用于从文件中读取一个字符,fgetc
函数每次调用将会返回当前文件指针所指向的字符,并将文件指针指向下一个字符。
int fgetc(FILE *stream);
功能:
从流中读取下一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
失败返回EOF
读到文件末尾返回EOF
#include <stdio.h>int main(void)
{FILE *fp = NULL;char ch = 0;fp = fopen("file.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}while (1){ch = fgetc(fp);if (EOF == ch) // 读到末尾退出循环{break;}printf("ch = %c\n", ch);}fclose(fp);return 0;
}
统计文件的行数
#include <stdio.h>int main(void)
{FILE *fp = NULL;char ch = 0;int cnt = 0;fp = fopen("file.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}while (1){ch = fgetc(fp);if (EOF == ch){break;}if ('\n' == ch){cnt++;}}fclose(fp);printf("cnt = %d\n", cnt);return 0;
}
2.fgetc/fputc与getchar/putchar的区别
char ch = 0;
ch = getchar();
ch = fgetc(stdin);
char ch = 'a'
putchar(ch);
fputc(ch, stdout);
fgetc
和 fputc
主要用于文件操作,需要指定文件流作为参数;而getchar
和 putchar
主要用于标准输入输出,直接与控制台交互,不需要额外指定文件。
实现将一个文件中的内容拷贝到另一个文件中
#include <stdio.h>int main(void)
{FILE *fsrc = NULL;FILE *fdst = NULL;char tmp = 0;fsrc = fopen("src.txt", "r");if (NULL == fsrc){perror("fail to fopen");return -1;}fdst = fopen("dst.txt", "w");if (NULL == fdst){perror("fail to fopen");return -1;}while (1){tmp = fgetc(fsrc);if (EOF == tmp){break;}fputc(tmp, fdst);}fclose(fsrc);fclose(fdst);return 0;
}
3.fputs
int fputs(const char *s, FILE *stream);
功能:
向流中写入一个字符串
参数:
s:字符串首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF
#include <stdio.h>int main(void)
{FILE *fp = NULL;char str[32] = {"hello world"};fp = fopen("file.txt", "w");if (NULL == fp){perror("fail to fopen");return -1;}fputs(str, fp);fclose(fp);return 0;
}
4.fgets
char *fgets(char *s, int size, FILE *stream);
功能:
从流中读取一个字符串
参数:
s:存放字符串空间首地址
size:最多读取字符的个数
stream:文件流指针
返回值:
成功返回存放字符串空间的首地址
失败返回NULL
读到文件末尾返回NULL
#include <stdio.h>int main(void)
{FILE *fp = NULL;char tmpbuff[3] = {0};fp = fopen("file.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}fgets(tmpbuff, sizeof(tmpbuff), fp);printf("tmpbuff = %s\n", tmpbuff);fclose(fp);return 0;
}
gets和fgets区别:
1.gets没有给定最多读取字符的个数,有越界风险
fgets需要给定最多读取的字符个数,没有越界风险
2.gets会去掉从终端接收的\n字符,换成\0字符
fgets会保留从终端接收的\n字符,并在其末尾加入\0
puts和fputs的区别
1.puts会在字符串末尾多打印一个\n字符
2.fputs不会在末尾多打印\n字符
拷贝文件中的内容
#include <stdio.h>int main(void)
{FILE *fsrc = NULL;FILE *fdst = NULL;char tmpbuff[4096] = {0};char *pret = NULL;fsrc = fopen("src.txt", "r");if (NULL == fsrc){perror("fail to fopen");return -1;}fdst = fopen("dst.txt", "w");if (NULL == fdst){perror("fail to fopen");return -1;}while (1){pret = fgets(tmpbuff, sizeof(tmpbuff), fsrc);if (NULL == pret){break;}fputs(tmpbuff, fdst);}fclose(fsrc);fclose(fdst);return 0;
}
5.fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中
参数:
ptr:存放数据空间的首地址
size:每个数据对象的大小
nmemb:数据对象的个数
stream:文件流指针
返回值:
成功返回写入对象的个数
失败返回0
读到文件末尾返回0
#include <stdio.h>typedef struct student
{char name[32];char sex;int age;int score;
}stu_t;int main(void)
{stu_t a = {"zhangsan", 'm', 19, 100};stu_t b = {"lisi", 'f', 18, 90};stu_t s[3] = {{"zhaowu", 'm', 19, 100},{"maliu", 'f', 18, 65},{"tianqi", 'm', 17, 90},};FILE *fp = NULL;fp = fopen("file.txt", "w");if (NULL == fp){perror("fail to fopen");return -1;}fwrite(&a, sizeof(stu_t), 1, fp);fwrite(&b, sizeof(stu_t), 1, fp);fwrite(s, sizeof(stu_t), 3, fp);fclose(fp);return 0;
}
2.fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中
参数:
ptr:存放读取内容空间首地址
size:读取对象的大小
nmemb:读取对象的个数
stream:文件流指针
返回值:
成功返回读到对象个数
失败返回0
读到文件末尾返回0
练习:
1.利用fread和fwrite完成将src.jpg图片内容拷贝到dst.jpg图片中
char tmpbuff[4096];
3.fprintf
int fprintf(FILE *stream, const char *format, ...);
功能:
将格式化字符串输出到stream指向的流中
printf
fprintf(stdout, );
4.fsancf
int fscanf(FILE *stream, const char *format, ...);
功能:
从流中读取格式化的字符串
2.流的定位:
1.ftell
long ftell(FILE *stream);
功能:
获得流的偏移量
2.rewind
void rewind(FILE *stream);
功能:
将流的偏移量重新设置到开头
3.fseek
int fseek(FILE *stream, long offset, int whence);
功能:
设置流的偏移量
参数:
stream:文件流指针
offset:偏移量
> 0 向后偏移
< 0 向前偏移
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
#include <stdio.h>int main(void)
{FILE *fp = NULL;fp = fopen("file.txt", "w");if (NULL == fp){perror("fail to fopen");return -1;}fseek(fp, 10, SEEK_SET);fputc('a', fp);fseek(fp, -5, SEEK_CUR);fputc('b', fp);fseek(fp, 0, SEEK_SET);fputc('c', fp);fclose(fp);return 0;
}
练习:从终端输入一个单词,获得单词的含义,格式如下
a indef art one
abacus n.frame with beads that slide along parallel rods, used for teaching numbers to children, and (in some countries) for counting
abandon v. go away from (a person or thing or place) not intending to return; forsake; desert
abandonment n. abandoning
abase v. ~ oneself/sb lower oneself/sb in dignity; degrade oneself/sb ;
abash to destroy the self-possession or self-confidence of:disconcert
abashed adj. ~ embarrassed; ashamed
abate v. make or become less
abattoir n. = slaughterhouse (slaughter)
abbess n. woman who is head of a convent or nunnery
abbey n. buildingin which monks or nuns live as a community under an abbot or abbess
abbot n. man who is head of a monastery or abbey
abbreviate v. ~ sth shorten (a word, phrase, etc), esp by omitting letters
abbreviation n. abbreviating or being abbreviated
abdicate v. resign from or formally renounce the throne
abdication giving up control, authority
abdomen n. part of the body below the chest and diaphragm, containing the stomach, bowels and digestive organs
abdominal adj. in, of or for the abdomen
#include <stdio.h>
#include <string.h>int main(void)
{char word[256] = {0};char tmpbuff[4096] = {0};FILE *fp = NULL;char *pret = NULL;char *ptmp = NULL;gets(word);fp = fopen("dict.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}while (1){pret = fgets(tmpbuff, sizeof(tmpbuff), fp);if (NULL == pret){break;}ptmp = tmpbuff;while (*ptmp != ' ' && *ptmp != '\0'){ptmp++;}*ptmp = '\0';ptmp++;while (*ptmp == ' '){ptmp++;}if (0 == strcmp(tmpbuff, word)){printf("%s", ptmp);fclose(fp);return 0;}}fclose(fp);printf("%s 单词不存在!\n", word);return 0;
}
相关文章:

IO接口 2月5日学习笔记
1.fgetc 用于从文件中读取一个字符,fgetc 函数每次调用将会返回当前文件指针所指向的字符,并将文件指针指向下一个字符。 int fgetc(FILE *stream); 功能: 从流中读取下一个字符 参数: stream:文件流指针 返回值: …...

Android Studio开发(一) 构建项目
1、项目创建测试 1.1 前言 Android Studio 是由 Google 推出的官方集成开发环境(IDE),专门用于开发 Android 应用程序。 基于 IntelliJ IDEA: Android Studio 是基于 JetBrains 的 IntelliJ IDEA 开发的,提供了丰富的功能和插件…...

stm32flash模拟eeprom
stm32f103CB的flash是128k(起始地址是 0x08000000 到 0x0801FFFF) falsh的末地址是0x801FFFF,即倒数一页是0x801FBFF(1页按照1kB1024B来算) stm32f103参考手册stm32f103cb.pdf stm32的FLASH分为主存储块和信息块&…...
多模态MLLM都是怎么实现的(2)-DDPM
上一篇的链接:多模态MLLM都是怎么实现的(2) (qq.com) 上上篇的链接:多模态MLLM都是怎么实现的(1) (qq.com) 在第一篇我们简单介绍了一下多模态训练的原理,包括clip,第二篇正好Sora横空出世,也让我就Dit做了一下抛砖引玉,顺便讲了VAE和ViT的部分,上节课我说过, DiT…...

QT----写完的程序打包为APK在自己的手机上运行
目录 1、qt安装android组件2、打开qt配置Android 环境3、手机打开开发者模式,打开usb调试,连接电脑4、运行代码 1、qt安装android组件 qtcreater–工具-QTMaintenaceTool-startMaintenaceTool—登陆—添加或修改组件—找到android,安装 若是…...
Windows C++ SecurityImpersonation级别:线程临时采用另一个用户(客户端)的身份进行操作的能力
SecurityImpersonation 是 Windows 操作系统中安全模型的一个级别,用于描述一个线程临时采用另一个用户(客户端)的身份进行操作的能力。这是Windows安全性的一个核心概念,允许服务或进程在执行特定任务时拥有与请求该服务的用户相…...

重学SpringBoot3-yaml文件配置
重学SpringBoot3-yaml文件配置 引言YAML 基本语法YAML 数据类型YAML 对象YAML 数组复合结构标量引用 YAML 文件结构Spring Boot 中的 YAML 配置注意事项总结参考 引言 YAML(YAML Ain’t Markup Language)是一种常用于配置文件的数据序列化格式ÿ…...

【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案
本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案 【关键词】战略规划、组织效能、管理咨询 【文件核心观点】 - 通过长期行业积累和市场洞察&#…...

特征值和特征向量及其在机器学习中的应用
特征值和特征向量是线性代数中的概念,用于分析和理解线性变换,特别是由方阵表示的线性变换。它们被用于许多不同的数学领域,包括机器学习和人工智能。 在机器学习中,特征值和特征向量用于表示数据、对数据执行操作以及训练机器学…...
【Vue3】Ref 和 ShallowRef 的区别
这里写自定义目录标题 什么是 Ref什么是 ShallowRef区别对比示例代码 什么是 Ref Ref 是 Vue 3 中的一个新的基本响应式数据类型,它允许我们包装任意的 JavaScript 值,并且在数据变化时发出通知。Ref 提供了一个 .value 属性来访问其内部的值࿰…...

Linux - 进程概念
1、冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系; 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 输入单元:…...

H5小游戏,象棋
H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html PUBLIC "-//W3C/…...

LLM春招准备(1)
llm排序 GPT4V GPT-4V可以很好地理解直接绘制在图像上的视觉指示。它可以直接识别叠加在图像上的不同类型的视觉标记作为指针,例如圆形、方框和手绘(见下图)。虽然GPT-4V能够直接理解坐标,但相比于仅文本坐标,GPT-4V在…...
网络安全知识点总结
1、常见的网络攻击有哪些? 答:(1)口令攻击:也就是窃取用户的账户和密码,普通用户习惯于设置简单的密码,且多个系统用同一套密码,黑客可以使用字典攻击(常用密码库&#…...

服务完善的智能组网系统?
智能组网是现代信息技术的重要组成部分,它通过将各种设备和计算机连接起来,实现高效的数据传输和远程通信。在一个全球化、高度互联的时代背景下,智能组网已经成为了各行各业的必需品。传统的组网方案往往面临着许多问题和挑战。为了解决这些…...

VS2022如何添加行号?(VS2022不显示行号解决方法)
VS2022不显示行号解决方法 VS2022是非常好用的工具,很多同学在初学C/C的时候,都会安装,默认安装好VS2022后,写代码时,在编辑框的窗口左边就有显示行号,如下图所示: 但是有些同学安装好后&#…...

125.验证回文字符串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则&#…...
Spring Boot的启动流程(个人总结,仅供参考)
SpringBoot应用程序的启动流程主要包括初始化SpringApplication和运行SpringApplication两个过程。 1.初始化SpringApplication包括配置基本的环境变量、资源、构造器和监听器,初始化阶段的主要作用是为运行SpringApplication实例对象启动环境变量准备以及进行必要的…...

用BIO实现tomcat
一、前言 本课程的难度较高,需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…...

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】
目录: 每篇前言:引子——本篇目的1、 代码混淆和还原(1)单独替换:(2)整个js文件替换: 2、算法入口分析3、 深入分析(0)整体分析:(1&am…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...