fwrite 和 fread函数

C语言函数,向文件写入一个数据块  。
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针
(5)返回实际写入的数据项个数count。


#include<stdio.h>


#define set_s(x,y) {strcpy(s[x].name,y);s[x].size=strlen(y);}


#define nmemb 3
struct test
{
    char name[20];
    int size;
}s[nmemb];




int main()
{
    FILE *fp;
    set_s(0,"linux");
    set_s(1,"android");
    set_s(2,"ios");
int wn;
    fp=fopen("D:/c-codeblock/t_write.txt","w+");
    wn=fwrite(s,sizeof(struct test),nmemb,fp);
    printf("wn=%d\n",wn);
    //文件操作完成后,需要将文件关闭
    fclose(fp);
    //在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;
    fp=NULL;
 return 0;
}



定义函数:size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);

函数说明:fread()用来从文件流中读取数据. 

参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值比参数nmemb 来得小, 则代表可能读到了文件的尾或有错误发生, 这时必须用feof()或ferror()来决定发生什么情况.

#include<stdio.h>


#define nmemb 2
struct test
{
char name[20];
int size;
}s[nmemb];
int main()
{


    FILE *fp;
    int rn;


   // fp=fopen("D:/c-codeblock/t.txt","r");
  // fp=fopen("D:/c-codeblock/write.txt","r");
   fp=fopen("D:/c-codeblock/t_write.txt","r+");
    rn=fread(s,sizeof(struct test),nmemb,fp);
    printf("rn==%d\n",rn);
    fclose(fp);
    int i;
    for(i=0;i<nmemb;i++)
    {
     //    printf(s);
       printf("%d,%20s,%d\n",i,s[i].name,s[i].size);
    }
    return 0;
}



如果将fwrite的file

通过fgets 读取出来

#include<stdio.h>




int main()
{
    char s[1024];


      FILE* fp;
    int i;
   // fp=fopen("D:/c-codeblock/write.txt","r+");


   //  fp=fopen("D:/c-codeblock/t.txt","r");
  // fp=fopen("D:/c-codeblock/write.txt","r");
   fp=fopen("D:/c-codeblock/t_write.txt","r+");


    while((fgets(s,2,fp))!=NULL)
    {
     //printf(&s[0]);
     printf(&s[0]);  //每次读取一个char,完全读取
    }
    return 0;
}



while((fgets(s,1024,fp))!=NULL) //只能读取linux ,第一行,,为何会是这个结果》》》》???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值