文件操作(二进制读写)
/*** a.txt ***/ this is a word helloworld /*** file.c ***/ #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { FILE *p = fopen("./a.txt","r"); while(!feof(p)) { char buf[100] = {0}; fscanf(p,"%s",buf); printf("%s\n",buf); } fclose(p); return 0; }
fscanf()函数和scanf函数用法一样。fscanf是从一个文件中读取字符串,scanf是从键盘读取字符串。(遇到空格就停止)
/*** a.txt ***/ 23 + 45 = 35 + 63 = 34 + 45 = /*** file1.txt ***/ #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int a,b; FILE *p = fopen("./a.txt","r"); while(!feof(p)) { char buf[100] = {0}; //fgets(buf,"%s",p); //fscanf(p,"%s",buf); fscanf(p,"%d + %d = ",&a,&b); printf("a = %d , b = %d\n",a,b); //printf("%s\n",buf); } fclose(p); return 0; } /*** fprintf.c ***/ #include<stdio.h> #include<string.h> int main() { FILE *p = fopen("./b.txt","w"); char buf[100] = "hello world"; fprintf(p,"%s",buf); fclose(p); return 0; }
fread()函数和fwrite()函数:操作文本文件和二进制文件
fopen()函数只能读文本文件
/*** fread.c ***/ #include<stdio.h> int main() { FILE *p = fopen("./a.txt","rb"); char buf[100] = {0}; fread(buf,sizeof(char),1,p); //第一个参数是缓冲区,第二个参数是读取字节大小,第三个 //参数表示读取字节个数,第四个参数表示文件指针 printf("buf = %s\n",buf); fclose(p); return 0; } /*** fread1.c ***/ #include<stdio.h> int main() { FILE *p = fopen("./a.txt","rb"); while(!feof(p)) { char buf[20] = {0}; fread(buf,sizeof(char),sizeof(buf),p); printf("buf = %s\n",buf); } fclose(p); return 0; }
fread()函数有返回值,返回的是size_t类型,unsigned int ==》 %u
/*** fread.c ***/ #include<stdio.h> int main() { FILE *p = fopen("./c.txt","rb"); char buf[1024] = {0}; size_t res = fread(buf,sizeof(char),sizeof(buf),p); printf("res = %u\n",res); /* while(!feof(p)) { char buf[20] = {0}; fread(buf,sizeof(char),sizeof(buf),p); printf("buf = %s\n",buf); } */ fclose(p); return 0; } /*** c.txt ***/ asd
运行结果:res = 4(文件结尾有一个换行字符‘\n’?);
size_t res = fread(buf,sizeof(int),sizeof(buf),p);
运行结果:res = 1;
以上程序的运行结果和windos环境下读文本文件的结果会出现差异。
/*** fwrite.c ***/ #include<stdio.h> int main() { FILE *p = fopen("./d.txt","wb"); char buf[1024] = {0}; buf[0] = 'a'; buf[1] = 'b'; buf[2] = 'c'; fwrite(buf,sizeof(char),sizeof(buf),p); fclose(p); return 0; }
运行结果:abc
文件大小是1K(buf)数组大小,文件后面全是0。
/*** fwrite.c ***/ #include<stdio.h> int main() { FILE *p = fopen("./d.txt","w"); int a = 0x12345678; fwrite(&a,sizeof(char),4,p); fclose(p); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)