C语言读出整个文件内容以及部分文件函数的讲解

C语言读出整个文件内容以及部分文件函数的讲解

写在前面
1. 建议先直接看代码,遇到不懂的函数再看函数的使用方法
2. 文件操作不是复制几行代码就可以解决的,建议花点时间认真学习一下

1. 用到的函数

一、必须用到的函数

  1. fopen(“文件路径名”,“读取类型”)
  • 功能:打开文件
  • 参数:要打开的文件路径 ,读取类型(只读“r”,重写“w”,追加“a”,读写“r+”)
  • 例子:fopen(“test.txt”,“r”);只读方式打开当前路径下test.txt文本

  1. fseek(FILE *stream, long offset, int fromwhere)
  • 功能:把与fp有关的文件位置指针放到一个指定位置
  • 参数:
    • (1).文件指针(fp)
    • (2).文件指针偏移量(-3表示前后偏移3个字符,+3向后)
    • (3).文件指针的当前位置(只可为三种规定参数)
      • ①SEEK_SET 文件开头
      • ②SEEK_CUR 文件当前位置
      • ③ SEEK_END 文件末尾
  • 例子:fseek(fp,50L,SEEK_SET);将位置指针移到离文件头50个字节处

  1. fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • 功能:从给定文件流 stream 读取数据到 ptr 所指向的数组中
  • 参数:
    • ptr – 打算存放文件内容的指针
    • size – 文件的大小,一般以字节为单位
    • nmemb – 文件字节的个数,每个元素的大小为 size 字节
    • stream – 打开的文件指针(fp)
  • 例子:fread(tmp,10,20,fp);在文件指针fp指向的文件中以10为单位读取20个元素,放入tmp指针指向的地址空间中

  1. ftell(FILE *stream)
  • 功能: 用于得到文件位置指针当前位置相对于文件首的偏移字节数
  • 参数:fp文件指针指向的位置
  • 例子:ftell(fp);fp指针当前位置对于文件开始的偏移量(可以通过偏移量计算文件大小)

二、建议使用的函数

  1. malloc(“size”);
  • 功能:为变量(数组)动态分配空间
  • 参数:打算分配空间的大小
  • 用法:tmp=(char )malloc(10sizeof(char)); 给tmp字符串分配10个字节大小的空间

  1. memset(void*,int/char,size);
  • 功能:替换数组内的内容,可用作数组内容初始化,可以避免结果产生乱码
  • 参数:要替换的数组当前指针位置,替换为什么内容,当前指针往后的单位数(可替换部分)
  • 用法:memset(tmp,’\0’,strlen(tmp)*sizeof(char)); 将tmp数组全部初始化为“\0”;
    • strlen()用于求数组的长度
2.代码分析
//代码虽简单,但还是需要认真分析滴!
# include <stdio.h>
int main( void )
{
    FILE *fp;
    int file_size;   //保存文件字符数
    char *tmp;       //将文件内容读到此指针位置
    fp=fopen("./test.txt","r");   //打开文件
    fseek(fp,0,SEEK_END);      //将文件指针指向该文件的最后
    file_size=ftell(fp);       //根据指针位置,此时可以算出文件的字符数
    printf("文件字符数为 %d\n",file_size);   
    tmp=(char *)malloc(file_size*sizeof(char)); //根据文件大小为tmp动态分配空间
    memset(tmp,'\0',file_size*sizeof(char));  //初始化此控件内容,否则可能会有乱码
    fseek(fp,0,SEEK_SET);                 //重新将指针指向文件首部
    fread(tmp,sizeof(char),file_size,fp); //开始读取整个文件
    printf("文件内容为\n%s",tmp);
	return 0;
}
3.运行结果

在这里插入图片描述

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值