fseek(fp, 0, SEEK_END);
时间: 2025-03-28 09:05:13 浏览: 40
### fseek 函数的用法
`fseek()` 是 C 语言标准库中的一个重要函数,用于重新定位文件指针的位置。其基本语法如下:
```c
int fseek(FILE *stream, long offset, int whence);
```
其中参数 `whence` 可以取三个宏定义之一:`SEEK_SET`, `SEEK_CUR`, 和 `SEEK_END`。
- **`SEEK_SET`**: 文件开头作为参考点[^1]。
- **`SEEK_CUR`**: 当前文件指针位置作为参考点[^2]。
- **`SEEK_END`**: 文件末尾作为参考点[^3]。
当使用 `SEEK_END` 时,`offset` 参数通常为负值,表示从文件末尾向前移动指定字节数。如果 `offset` 设置为正值,则会尝试超出文件的实际长度,这可能导致未定义行为[^4]。
#### SEEK_END 的具体作用
`SEEK_END` 宏的作用是从文件的末尾开始计算偏移量。下面是一个具体的例子来展示如何使用它:
```c
#include <stdio.h>
int main() {
FILE* file = fopen("example.txt", "w+");
if (!file) {
perror("Error opening file");
return 1;
}
fprintf(file, "Hello, world!");
// 将文件指针移到距离文件末尾两个字符之前的位置
fseek(file, -2, SEEK_END);
char buffer[10];
fgets(buffer, sizeof(buffer), file);
printf("Last two characters: %s\n", buffer);
fclose(file);
return 0;
}
```
在这个程序中,通过调用 `fseek(file, -2, SEEK_END)`,文件指针被设置到离文件结束处倒数第二个字符的位置。
需要注意的是,在某些操作系统上,二进制模式下的文件可能不允许负向偏移。因此建议始终确认目标平台的行为特性。
另外,可以结合 `ftell()` 来获取当前文件指针的确切位置以便进一步处理数据读写需求。
### 总结
综上所述,`fseek()` 提供了一种灵活的方式调整文件内部的操作位置,而 `SEEK_END` 则特别适用于基于文件结尾进行相对寻址的情况。合理运用这些工具能够极大地简化复杂文件管理任务。
阅读全文
相关推荐



















