文件读写函数

参考这篇博客对两对文件读写函数进行简单整理。
1.fscanf()、fprintf()用于格式化读写文件
函数原型

int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );

即在原本的scanf()和printf()函数基础上多了个参数FILE *fp(文件句柄)。
当把第一个参数改为stdin时,fscanf()与scanf()作用一致。
要注意格式化控制字符串与要输入输出的参数的数据类型保持一致!

int main()
{
   FILE * fp;
   char c[]="Hello world!";
   char buffer[20];

   fp = fopen ("file.txt", "w+");
   fprintf(fp,"%s",c);
  
   rewind(fp);	//定位到文件的开头。
   while(!feof(fp))
   {
   fscanf(fp, "%s", buffer); 
   printf("%s ", buffer);
   } 
   printf("%s\n", buffer);
   fclose(fp);
   
   return(0);
}

2.数据块读写文件函数:fread()、fwrite()函数
函数原型

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)

即从给定的数据流stream中读取nmemb个大小为size的元素到ptr所指向的数组中去。

int main()
{
   FILE *fp;
   char c[] = "hello world!";
   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);
}

相比与fscanf和fprintf,fread和fwrite对数据块进行读取,读取速度较快。但是它们有缺陷,就是在读取的时候 while(!feof(fp)) 不精确,往往会发现它多循环了一次。因为feof()是根据剩余字符来判断是否文件结尾的,而文件的结尾标识符是’/0’是两个字节,在读取’/‘的时候feof()还是为false只有读取完’/0’的时候feof()==true。致使产生多余的循环。但是在fscanf和fprintf中由于对数据的格式做了准确规定,不会出现这种问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值