fseek() 是C标准库中的一个文件定位函数,用于移动文件指针到指定位置,常用于随机访问文件内容。
![图片[1]_C语言中fseek函数用法小结_知途无界](https://zhituwujie.com/wp-content/uploads/2025/04/d2b5ca33bd20250427095352.png)
函数原型
int fseek(FILE *stream, long offset, int whence);
参数说明
- stream:指向FILE对象的指针,表示要操作的文件流
- offset:偏移量,指定从whence位置开始移动的字节数
- 正数:向文件末尾方向移动
- 负数:向文件开头方向移动
- 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); // 恢复到文件开头
注意事项
- 二进制模式与文本模式:
- 在二进制模式下,偏移量是精确的字节数
- 在文本模式下,偏移量可能因换行符转换而不可靠(Windows下
\n会被转换为\r\n)
- 错误处理:
if (fseek(fp, offset, whence) != 0) {
perror("fseek failed");
// 处理错误
}
- 与rewind()的关系:
rewind(fp)等价于fseek(fp, 0, SEEK_SET)- 但
rewind()还会清除文件结束指示器和错误指示器
- 文件指针位置:
- 移动后可以使用
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

























暂无评论内容