文件IO-fwrite-fread-fscanf-fflush

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)。
posted @ 2024-01-16 11:33  steve的miao  阅读(7)  评论(0编辑  收藏  举报