int fputc (int c, File *fp);
功能
- 将字符c写入到fp流中
返回值
- 写入成功:返回写入文件的字符的ASCII码值
- 写入失败:返回EOF(-1)
当正确写入一个字符的数据后,文件内部写指针会自动后移一个字节的位置
int fgetc(FILE *stream);
功能
- 从参数流中读取一个字符
返回值
- 读取成功:返回所读取的一个字符。如果读到文件末尾或者读取出错时
- 读取出错/读到文件末尾:返回EOF
读取一个字节后,光标位置后移一个字节
//将字符串arr写入到标准输出中去
#include <stdio.h>
#include<string.h>
int main()
{
char *arr="HelloWorld";
int i=0;
while(i<strlen(arr)){
fputc(arr[i],stdout);
++i;
}
fputc('\n',stdout);
return 0;
}
//把f1所指的文件内容拷贝到f2所指的文件中
#include <stdio.h>
int main()
{
FILE *f1,*f2;
if(f1=fopen("Demo.txt","r"))
{
f2=fopen("Demo2.txt","w+");
char s;
while((s=fgetc(f1))!=EOF){
fputc(s,f2);
}
fclose(f2);
}
fclose(f1);
return 0;
}
二、字符串的写入和读取(fputs、fgets)
int fputs(const char *str, FILE *stream);
功能
- 将字符串str写入stream流中
返回值
- 写入成功:返回一个非负值
- 写入失败:返回 EOF(-1)
成功写入一个字符串后,文件的位置指针会自动后移
char *fgets(char *buf, int bufsize, FILE *stream);
功能
- 从stream流中读取bufsize-1字节的数据存放到buf中去,第bufsize个字节赋值为'\0'
返回值
- 读取成功:返回第一个参数buf字符串的首地址
- 读取失败:返回NULL,并设置error的值,buf的值可能被改变
成功写入一个字符串后,文件的位置指针会自动后移
遇到换行符就结束读取
//把f1所指的文件内容拷贝到f2所指的文件中
#include <stdio.h>
int main()
{
FILE *f1,*f2;
if(f1=fopen("Demo.txt","r"))
{
f2=fopen("Demo2.txt","w+");
char s[2];
while((fgets(s,2,f1))!=NULL)
{
fputs(s,f2);
}
fclose(f2);
}
fclose(f1);
return 0;
}
三、格式化字符串的读取和写入(fscanf、fprintf)
int fscanf(FILE* stream,const char* format,[argument...]);
功能
- 从stream流中读取后面的format格式的字符串,然后存放到后面的argument中
返回值
- 读取成功:返回写入的参数的个数
- 读取失败:失败返回EOF(-1)
注意
- fscanf遇到空格和换行时结束
int fprintf (FILE* stream, const char* format, [argument]);
功能
- 将格式化的字符串format写入到stream流中
返回值
- 读取成功:返回值是写入的字符数
- 读取失败:返回一个负数
注意
- fprintf直到出现字符串出现结束('\0')才停止写入
//从标准输入读取数据,然后写入到标准输出中
#include <stdio.h>
int main()
{
int num;
if(fscanf(stdin,"%d",&num))
{
fprintf(stdout,"%d",num);
}
return 0;
}
//将一些变量写入到Demo.txt中,然后再读取出来
#include<stdio.h>
#include<string.h>
int main()
{
FILE* f;
f=fopen("Demo.txt","w+");
char name[11]="HelloWorld";
int age=17;
double length=18.5;
fprintf(f,"%s %d %lf\n",name,age,length);//写入到文件中
fclose(f);//一定要记得关闭文件
strcpy(name,"");
age=0;
length=0;
f=fopen("Demo.txt","r");
fscanf(f,"%s %d %lf\n",&name,&age,&length);//再读取
printf("%s %d %lf\n",name,age,length);//打印出来
fclose(f);
return 0;
}
四、fread()、fwrite()
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
功能
- 从stream流中读取count次数据,每次读取size个字节大小。然后写入到buffer中
返回值
- 读取成功:返回实际读取stream流的次数,而不是字节数
- 读取失败/达到文件尾:返回0
- 若stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为EINVAL以及返回0
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
功能
- 从buffer中读取count次,每次读取size个字节,然后写入到stream流中
返回值
- 读取成功:返回实际写入stream流的次数,而不是字节数
//将一个结构体信息写入到文件中,然后再文件中读出来
#include<stdio.h>
#include<string.h>
typedef struct student
{
int age;
char name[20];
}stu;
int main()
{
stu Man={17,"xiaoming"};
stu Man2;
FILE *pf;
if(pf=fopen("Demo.txt","w+"))
{
fwrite(&Man,sizeof(stu),1,pf);
}
fclose(pf);
if(pf=fopen("Demo.txt","r"))
{
fread(&Man2,sizeof(stu),1,pf);
printf("Age:%d,Name:%s\n",Man2.age,Man2.name);
fclose(pf);
}
return 0;
}