首页 > 其他分享 >文件IO-fwrite-fread-fscanf-fflush

文件IO-fwrite-fread-fscanf-fflush

时间:2024-01-16 11:47:53浏览次数:24  
标签:fp stream fscanf buffer fwrite fread char FILE size

fwrite

  • 把 ptr 所指向的数组中的数据写入到给定流 stream 中。
    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
    参数
  • ptr -- 这是指向要被写入的元素数组的指针。
  • size -- 这是要被写入的每个元素的大小,以字节为单位。
  • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

返回值

  • 如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
#include<stdio.h>
 
int main ()
{
   FILE *fp;
   char str[] = "This is runoob.com";
 
   fp = fopen( "file.txt" , "w" );
   fwrite(str, sizeof(str) , 1, fp );
 
   fclose(fp);
  
   return(0);
}

fread

  • 从给定流 stream 读取数据到 ptr 所指向的数组中。
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
  • size -- 这是要读取的每个元素的大小,以字节为单位。
  • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值

  • 成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
#include <stdio.h>
#include <string.h>
 
int main()
{
   FILE *fp;
   char c[] = "This is runoob";
   char buffer[20];
 
   /* 打开文件用于读写 */
   fp = fopen("file.txt", "w+");
 
   /* 写入数据到文件 */
   fwrite(c, strlen(c) + 1, 1, fp);
 
   /* 查找文件的开头 */
   fseek(fp, 0, SEEK_SET);
 
   /* 读取并显示数据 */
   fread(buffer, strlen(c)+1, 1, fp);
   printf("%s\n", buffer);
   fclose(fp);
   
   return(0);
}

> This is runoob
#include <stdio.h>

int main()
{
    // 使用 "rb" 读取二进制方式打开文件
    FILE *p = fopen("D:\\a.txt", "rb");

    // 用于接收读取数据的缓冲区
    char buffer[1024] = {0};

    // buffer : 将文件读取到内存的位置
    // sizeof(char) : 读取的基本单元字节长度
    // sizeof(buffer) : 读取的基本单元个数,
    //       读取字节个数是 sizeof(buffer) * sizeof(char)
    // p : 文件指针
    fread(buffer, sizeof(char), sizeof(buffer), p);

    // 打印读取的内容
    printf("buffer = %s\n", buffer);
    return 0;
}

fscanf

  • int fscanf(FILE *stream, const char *format, ...)
#include <stdio.h>
#include <stdlib.h>

#define TXT "str.txt"

// 文件流方式
void file_function(void)
{
	char buf[16] = {0};		// ?
	
	FILE *fp = fopen(TXT, "r");
	if (fp == NULL){
		perror("fopen error");
		exit(-1);
	}

	// 只能按照指定长度读取数据
	//fread(buf, sizeof(char), sizeof(buf), fp);

	// 一行一行的读取字符串
	fscanf(fp, "%s", buf);
	printf("buffer = %s\n", buf);

	fscanf(fp, "%s", buf);
	printf("buffer = %s\n", buf);
	
	fclose(fp);
}

int main(void)
{
	file_function();
	return 0;
}

sprintf

  • 发送格式化输出到 str 所指向的字符串。
    int sprintf(char *str, const char *format, ...)

返回值

  • 如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
#include <stdio.h>
#include <math.h>

int main()
{
   char str[80];

   sprintf(str, "Pi 的值 = %f", M_PI);
   puts(str);
   
   return(0);
}

> Pi 的值 = 3.141593

fflush

  • 刷新流 stream 的输出缓冲区。
    int fflush(FILE *stream)

参数

  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个缓冲流。

返回值

  • 如果成功,该函数返回零值。如果发生错误,则返回 EOF,且设置错误标识符(即 feof)。

标签:fp,stream,fscanf,buffer,fwrite,fread,char,FILE,size
From: https://www.cnblogs.com/starcos/p/17967305

相关文章

  • fread实现getchar(加速!!!)
    fread实现的getchar代码:inlinecharget(){ staticcharbuf[100000],*p1=buf,*p2=buf; returnp1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}以下内容由chatgpt生成:上面的代码定义了一个名为get()的内联函数,它从标准输入......
  • fread函数
    fread函数的原型是:size_tfread(void*ch,size_tmode,size_tnumber,FILE*fp)。第一个参数是数组的地址;第二个参数是数据类型的大小;第三个参数是需要读取多少个这样的数据类型;第四个参数是文件指针。该函数正常情况下返回的值是number,这表示读取了多少个数据。例子:doubleret[1......
  • exifread库可以获取的图片元数据信息
    使用exifread库可以提取图像的各种基础信息,包括但不限于以下内容:1.相机信息:-相机制造商(Make)-相机型号(Model)-镜头制造商(LensMake)-镜头型号(LensModel)2.拍摄参数:-光圈值(ApertureValue)-快门速度(ShutterSpeedValue)-曝光时间(ExposureTime)-ISO感光度......
  • Ubuntu18.04安装opencv和opencv_contrib1.undefined reference to `TIFFReadDirectory
    Ubuntu18.04安装opencv和opencv_contrib目录​​Ubuntu18.04安装opencv和opencv_contrib​​​​1.版本​​​​2.源码编译和安装opencv和opencv_contrib​​​​(1)下载o......
  • gffread软件实现基因组注释文件gff 和 gtf的相互转换
     001、下载测试gff文件,以山羊的gff注释文件为例[root@pc1test]#wgethttps://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/001/704/415/GCF_001704415.2_ARS1.2/GCF_00170......
  • Rust Read、BufRead、BufReader..
    今天写代码的时候有一个需求,我希望在某个代表路径的字符串不为空时,以这个路径来读取文件,得到一个File对象:ifxxxisnotemptystr{letfile=File::open(Path::ne......
  • fread()和fwrite() fseek()
    1.函数功能 用来读写一个数据块。2.一般调用形式 fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);3.说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存......
  • fprintf()\fscanf()\sprintf() 函数的灵活应用
     fprintf函数和fscanf函数调用方式:fprintf(文件结构指针,格式字符串,输出表列)fscanf(文件结构指针,格式字符串,输出表列) voidmain(){   FILE*pWrite,*pRead; ......
  • 关于fread函数读取到的数据和实际统计的和数据不一样
    文件1.txt中的内容如下:  “123”   “456”用下面的方式统计文件的字节数:       fp=fopen("1.txt","r");    fseek(fp,0,SEEK_END);    fil......
  • C语言将二进制文件写入内存malloc fopen fseek fread
    ///20221118malloc获取文件大小,并读取内存中///voidFuncation3(){//保存读入到内存中的结果//创建一个buffer,用来将打开的文件放入申请的内存中char*......