fopen rb fseek fread fwrite

 

如果不执行一下注释掉的fseek,在用rb+模式打开时,写入4096个字节时就写不进去,

这是怎么回事?

### C语言中 `fopen`、`fseek` 和 `fwrite` 的使用方法 #### 1. `fopen` 函数 `fopen` 是用来打开文件的一个标准库函数。它允许指定文件名以及访问模式(如只读、写入或追加)。如果文件不存在或者无法按指定模式打开,则返回 `NULL`。 以下是其基本语法: ```c FILE *fopen(const char *filename, const char *mode); ``` 其中,参数 `mode` 可以为 `"r"` 表示只读,`"w"` 表示写入(覆盖),`"a"` 表示追加等[^4]。 #### 2. `fseek` 函数 `fseek` 用于重新定位文件指针到特定位置。它的功能类似于操作系统级别的 `lseek`,但它专属于标准 I/O 流操作。该函数的定义如下: ```c int fseek(FILE *stream, long offset, int fromwhere); ``` - 参数 `offset` 定义相对于起始点偏移量; - 参数 `fromwhere` 值可以是 `SEEK_SET`(文件开头)、`SEEK_CUR`(当前位置)或 `SEEK_END`(文件结尾)[^3]。 当调用成功时返回值为零;否则返回负一并设置全局变量 `errno` 来指示错误原因[^5]。 #### 3. `fwrite` 函数 `fwrite` 负责向已打开的文件中写入数据块。其声明形式如下所示: ```c size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); ``` 这里, - `ptr` 指向要写出的数据缓冲区地址; - `size` 单个元素字节数目; - `nmemb` 数据项总数; - 返回实际完成传输的数量[^1]。 #### 综合实例演示 下面给出一段综合运用上述三个函数的小例子来展示它们的实际应用情况。 ```c #include <stdio.h> int main(void){ /* 创建新文件 */ FILE* file = fopen("data.bin","wb+"); if(!file){ perror("Failed to create/open the file"); return -1; } double numbers[] = {1.1 ,2.2 ,3.3}; size_t num_written = fwrite(numbers,sizeof(double),3,file); printf("%zu elements were written.\n",num_written ); rewind(file); // 将文件指针重置回起点 float read_val=0.f; fseek(file,(long)(sizeof(double)*1),SEEK_SET);// 移动至第二个double数处 fread(&read_val,sizeof(float),1,file); printf("Read value is %g\n",(double)read_val); fclose(file); } ``` 此程序先创建了一个名为 `data.bin` 的二进制文件,并往里面存储了一些浮点型数值数组成员。接着通过调整文件内部位置标志符再次从中检索部分记录下来的内容加以验证[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值