news 2026/10/1 16:08:10

文件操作与文件指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文件操作与文件指针

1.stdin是指从键盘输入 stdout是指输出到显示屏 stderr是指标准错误流

在C语言中通过FILE*来维护流的操作,称为文件指针,通过它可以找到与其对应的文件

2.fopen用来打开文件

fclose用来关闭文件

r 是读取文件,如果没有则出错,是文本模式 rb对应二进制模式

w 是写文件,如果没有则创建文件写并且如果有原文件则会删除文件内容再输入新的内容,对应的是文本模式 wb对应的是二进制模式

fgetc输入一个字符 fgets输入一串字符串

fputc输出一个字符 fputs输出一串字符串

//打开文件data.txt,读取数据 //打开文件data_copy.txt,写数据 //从data.txt中读取数据存放到data_copy.txt文件中,直到文件结束。 //关闭两个文件 int main() { FILE* fp_one = fopen("data.txt", "r");// if (fp_one== NULL) { perror("fopen"); return 1;//失败返回1//return 0;对应成功 } FILE* fp_two = fopen("data_copy.txt", "w");//r对应文本模式(.txt) if (fp_two== NULL) //rb对应二进制模式(.exe) { perror("fopen"); fclose(fp_two); } int ch; while ((ch =fgetc( fp_one)) != EOF)//EOF:fgetc()和getchar()的返回值,文件读取 { //NULL:指针变量 fputc(ch, fp_two); } fclose(fp_one); fclose(fp_two); return 0; }

3.fgetc如果出错有两种情况

遇到文件末尾,用feof

遇到错误, 用 ferror

4.区分

scanf 针对标准输入流stdin,格式化输入函数

printf 针对标准输出流stdout,格式化输出函数

fscanf 针对所有输入流类型,格式化输入函数

fprintf 针对所有输出流类型,格式化输出函数

sscanf 从字符串中解析格式化的数据

sprintf 把格式化的数据转换成字符串

//struct str //{ // char name[20]; // int age; // float score; //}; //int main() //{ // struct str s = { "wanwu",18,99.5 }; // char arr[80] = { 0 }; // struct str t = { 0 }; // sscanf(arr,"名字:%s\t年龄:%d\t分数:%f", t.name, & (t.age), & (t.score)); // fprintf(stdout,"名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // printf("\n"); // sprintf(arr, "名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score);//printf,fprintf,sprintf为输出,可以使用%.2f // sprintf(arr,"名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score);//scanf fscanf,sscanf为输入,不可以使用%.2f // fprintf(stdout,"名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score); // printf("\n"); // sscanf(arr, "名字:%s\t年龄:%d\t分数:%f", t.name, &(t.age), &(t.score)); // fprintf(stdout, "名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // return 0; //} //struct str//结构体类型 //{ // char name[20]; // int age; // float score; //}; //int main() //{ // struct str t = { "wanwu",18,99.5 };//t是定义的变量 // FILE* fp = fopen("test.txt", "w"); // if (fp == NULL) // { // perror("fopen"); // return 1;//失败返回1//return 0;对应成功 // } // fscanf(fp, "名字:%s\t年龄:%d\t分数:%f", t.name, &(t.age), &(t.score)); // fprintf(stdout, "名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // return 0; //}

5.fwrite将数据写入指定的文件中,以二进制的形式写入

fread从文件流中读取数据,并将其内存到指向对应的缓冲区内

6.文件的随机读写

fseek 定位文件指针的位置 ,SEEK_SET对应文件开头

SEEK_CUR对应文件指针当前的位置,SEEK_END对应文件末尾

ftell指的是文件指针相对于文件开头的偏移量

rewind是指使文件指针回到文件开头位置处,rewind=fseek+清理错误标志或者稳健结束标志

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 16:07:08

做GEO培训,老师有没有真做过复测?用Python核验证据链

做GEO培训,老师有没有真做过复测?用Python核验证据链 如果你要给团队选GEO培训老师,先看他能否把一次真实的生成式引擎优化(Generative Engine Optimization,GEO)任务讲完整:目标问题是什么&am…

作者头像 李华
网站建设 2026/10/1 16:06:34

DeepTalk|从算力内卷到智能效率:重新理解Agent时代的Token

如今智能体成了热点,很多人比的仍是「谁的模型更大、更强」。真正决定能不能规模化落地的,往往不是参数量,而是每一次调用消耗多少 Token,这些 Token 最后有没有变成调用方能用的结果。大模型时代,Token 是生成文字的燃…

作者头像 李华
网站建设 2026/10/1 16:05:15

内网AI Agent落地实战:无需改造内网系统的通用解决方案

文章目录前言一、先说说这破需求是怎么来的二、现状:轮子造得比汽车还多三、目标:内网系统一根毛都不动四、方案:internal-mcp1. 凭据与授权管理2. 写操作要过审批3. MCP 市场4. Agent Skills5. 架构拆开看五、落地:装起来也就三步…

作者头像 李华
网站建设 2026/10/1 16:05:11

PIKACHU_SQL(数字型注入)

SOL Inject 本质——后端程序未对前端传上来的数据,进行严格校验、过滤或转义(如使用参数化查询Parameterized Query),导致用户可控的数据被拼接进SQL查询语句中,被数据库执行。被注入的变体(包括数字/字符/搜索/盲注/…

作者头像 李华