C语言中fseek函数用法小结

fseek() 是C标准库中的一个文件定位函数,用于移动文件指针到指定位置,常用于随机访问文件内容。

图片[1]_C语言中fseek函数用法小结_知途无界

函数原型

int fseek(FILE *stream, long offset, int whence);

参数说明

  1. stream:指向FILE对象的指针,表示要操作的文件流
  2. offset:偏移量,指定从whence位置开始移动的字节数
  • 正数:向文件末尾方向移动
  • 负数:向文件开头方向移动
  1. whence:起始位置,可以是以下值之一:
  • SEEK_SET:文件开头(标准C和POSIX标准)
  • SEEK_CUR:当前位置
  • SEEK_END:文件末尾

返回值

  • 成功时返回0
  • 失败时返回非0值

常见用法示例

1. 将文件指针移动到文件开头

fseek(fp, 0, SEEK_SET);

2. 将文件指针移动到文件末尾

fseek(fp, 0, SEEK_END);

3. 将文件指针从当前位置向后移动10个字节

fseek(fp, 10, SEEK_CUR);

4. 将文件指针从当前位置向前移动5个字节

fseek(fp, -5, SEEK_CUR);

5. 获取文件大小

fseek(fp, 0, SEEK_END);  // 移动到文件末尾
long size = ftell(fp);   // 获取当前位置(即文件大小)
fseek(fp, 0, SEEK_SET);  // 恢复到文件开头

注意事项

  1. 二进制模式与文本模式
  • 在二进制模式下,偏移量是精确的字节数
  • 在文本模式下,偏移量可能因换行符转换而不可靠(Windows下\n会被转换为\r\n
  1. 错误处理
   if (fseek(fp, offset, whence) != 0) {
       perror("fseek failed");
       // 处理错误
   }
  1. 与rewind()的关系
  • rewind(fp) 等价于 fseek(fp, 0, SEEK_SET)
  • rewind()还会清除文件结束指示器和错误指示器
  1. 文件指针位置
  • 移动后可以使用ftell()获取当前文件指针位置

实际应用示例

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "rb");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }

    // 移动到文件第10个字节处
    if (fseek(fp, 9, SEEK_SET) != 0) {
        perror("fseek failed");
        fclose(fp);
        return 1;
    }

    // 读取从该位置开始的10个字节
    char buffer[11];
    fread(buffer, 1, 10, fp);
    buffer[10] = '\0';  // 确保字符串终止
    printf("Read: %s\n", buffer);

    fclose(fp);
    return 0;
}

fseek()是处理二进制文件和需要随机访问文件内容时的重要工具,正确使用可以大大提高文件操作的灵活性。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞38 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容