目录
以下函数的头文件都是<stdio.h>
fgetc函数(适用于所有流)
fgetc函数的作用
从一个流或者stdin流中读取一个字符
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "r"); //打开一个文件指针,以r(可读取)的方式打开data.txt这个文件,使用的是相对路径
if (fp != NULL) //判断是否开辟成功
{
printf("%c", fgetc(fp)); //从文件中读取一个字符
fclose(fp); //关闭程序
}
return 0;
}
输出的是1,因为我们之前在这个文件中存放了12345的数据,读取一个字符,就读取了1
注意:当我们使用一次这个函数后,指向这个文件的指针会自动向后偏移一位
fgetc函数的返回值和参数
返回值:int,如果读取正确以整型返回这个字符(相当于返回字符的ASSIC码值),如果读取错误或者读到文件末尾,返回EOF,可以用feof函数判断是读取错误还是读到文件末
参数:stream,类型FILE*,为想要从中读取数据的指针,指针类型为FILE*
fputc函数(适用于所有流)
fputc函数的作用
往一个流或者stdout中写入一个字符
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "w"); //打开一个文件指针,以w(可写入)的方式打开data.txt这个文件,使用的是相对路径
if (fp != NULL) //判断是否开辟成功
{
printf("%c", fputc('a', fp)); //写入一个字符到文件中
fclose(fp); //关闭程序
}
return 0;
}
可发现文件data.txt中有一个a,就是我们刚刚写入的
注意:当我们以可读的形式打开这个文件的时候,之前的内存将会被清空
fputc函数的返回值和参数
返回值:int,如果写入正确以整型返回这个字符(相当于返回字符的ASSIC码值),如果写入错误则返回EOF
参数:c,类型int,想写入的字符(以assic码值的形式传入)
stream,类型FILE*,为想要从中写入数据的指针,指针类型为FILE*
fgets函数(适用于所有流)
fgets函数的作用
从流中读取一个字符串
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "r"); //打开一个文件指针,以r(可读)的方式打开data.txt这个文件,使用的是相对路径
char arr[10] = { 0 };
if (fp != NULL) //判断是否开辟成功
{
printf("%s", fgets(arr, 5, fp)); //读取一个字符串到文件中
fclose(fp); //关闭程序
}
return 0;
}
得到的结果是abcd,这是因为读取的时候,只会读取n-1个字符,n地方会自动放置了一个'\0'
注意:
1、当文件内容少于要读写的内容时候,只会读取文件中有的内容
2、读取n个字符的时候,实际上只会读取n-1个,n地方会自动放入'\0'
3、假如读取到换行符,也会提前结束读取
4、当我们使用之后,FILE*会自动向后移动n-1个位置
fgets函数的返回值和参数
返回值:char*,返回这个字符串的首地址,如果读取错误或者读到文件末,则返回NULL,可用feof函数来进行判断是读取错误还是读到文件末
参数:string,类型char*,存储数据的地址
n,类型int,最大读取的数量
stream,类型FILE*,为想要从中写入数据的指针,指针类型为FILE*
fputs函数(适用于所有流)
fputs函数的作用
从流中写入一个字符串
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "w"); //打开一个文件指针,以w(可写入)的方式打开data.txt这个文件,使用的是相对路径
char arr[10] = { 0 };
if (fp != NULL) //判断是否开辟成功
{
fputs("hello world", fp); //写入一个字符串到文件中
fclose(fp); //关闭程序
}
return 0;
}
我们可以发现这个文件被我们写入了hello world
注意:假如我们想换行,直接使用\n就行
fputs函数的返回值和参数
返回值:int,如果写入成功会返回非负数,如果写入失败返回EOF
参数:string,类型char*,想要输入字符串的地址
stream,类型FILE*,为想要从中写入数据的指针,指针类型为FILE*
fwrite函数(只是适用于文件)
fwrite函数的作用
写数据到一个流中
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "wb"); //打开一个文件指针,以wb(以二进制形式可写入)的方式打开data.txt这个文件,使用的是相对路径
int arr[] = { 1,2,3,4,5 };
if (fp != NULL) //判断是否开辟成功
{
fwrite(arr, sizeof(arr), 1, fp); //以二进制形式写入一个大小为sizeof(arr)的字符串到文件中
fclose(fp); //关闭程序
}
return 0;
}
当我们打开的时候就会发现看不懂,这是因为我们使用的是文本编辑器,打开二进制文件会自动转换成其他符号 ,假如我们想读取可以使用fread函数,来读取二进制文件
fwrite函数的返回值和参数
返回值:size_t,返回实际写入了多少个字符的数量
参数:buffer,类型void*,从哪个地方写出数据的指针
size,类型size_t,读取基本单字节大小 ,单位是字节
count,类型size_t,读取基本单元的数量
stream,类型FILE*,被写入的流
fread函数(只是适用于文件)
fread函数的作用
从流中读数据
#include<stdio.h>
int main()
{
FILE* fp = fopen("data.txt", "r"); //打开一个文件指针,以rb(以二进制形式读取)的方式打开data.txt这个文件,使用的是相对路径
int arr[] = { 1,2,3,4,5 };
if (fp != NULL) //判断是否开辟成功
{
fread(arr, sizeof(arr), 1, fp); //以二进制形式读取一个大小为sizeof(arr)的字符串到文件中
fclose(fp); //关闭程序
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
}
return 0;
}
之前data.txt中存储了上面fwrite写入的二进制数据,这次我们用fread将这些二进制数据读取出来
得到1,2,3,4,5,和之前写入的数据一样
fread函数的返回值和参数
返回值:size_t,返回实际读取了多少个字符的数量
参数:buffer,类型void*,将数据读取到哪个位置的指针
size,类型size_t,读取基本单字节大小 ,单位是字节
count,类型size_t,读取基本单元的数量
stream,类型FILE*,被读取的流