ftell函数的用法(用于获取指针位置)

本文通过一个实例详细介绍了ftell函数的使用方法,该函数能够获取文件指针相对于文件起始位置的偏移量。示例代码展示了在不同操作后如何获取当前文件指针的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数,下面给出一个简单的例子:
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int main()  
  5. {  
  6.     FILE *fp = fopen("myData.txt""w");  
  7.     cout << ftell(fp) << endl;  
  8.     fprintf(fp, "123");  
  9.     cout << ftell(fp) << endl;  
  10.     fprintf(fp, "%d", 456);  
  11.     cout << ftell(fp) << endl;  
  12.     fclose(fp);  
  13.   
  14.     int a;  
  15.     fp = fopen("myData.txt""r");  
  16.     cout << ftell(fp) << endl;  
  17.     fscanf(fp, "%d", &a);  
  18.     cout << ftell(fp) << endl;  
  19.     cout << a << endl;  
  20.     fclose(fp);  
  21.     cout << "*********************" << endl;  
  22.   
  23.     int b[10];  
  24.     memset(b, 0, sizeof(b));  
  25.     fp = fopen("yourData""wb");  
  26.     cout << ftell(fp) << endl;  
  27.     fwrite(b, sizeof(b), 1, fp);  
  28.     cout << ftell(fp) << endl;  
  29.     fclose(fp);  
  30.   
  31.     int c[10];  
  32.     fp = fopen("yourData""rb");  
  33.     cout << ftell(fp) << endl;  
  34.     fread(c, sizeof(c), 1, fp);  
  35.     cout << ftell(fp) << endl;  
  36.     fclose(fp);  
  37.   
  38.     return 0;  
  39. }  


       结果为:

0
3
6
0
6
123456
*********************
0
40
0

40


FROM: http://blog.youkuaiyun.com/stpeace/article/details/8245335

`ftell()` 函数是 C 标准库中的一个重要文件操作函数,它用于获取当前文件指针相对于文件开头的位置。这个位置是以字节为单位表示的偏移量。通常配合 `fopen()`, `fclose()`, `fseek()` 等其他文件处理函数一起使用。 ### 函数原型 ```c long ftell(FILE *stream); ``` #### 参数说明: - **FILE \*stream**:指向已经打开的文件流的指针。 #### 返回值: 如果成功,则返回当前位置距离文件开始处的偏移量(以长整型数表示)。若失败则会返回 -1L,并设置错误指示符 errno ,如遇到非法输入或其他系统级错误。 ### 使用示例 下面是一个简单的例子展示如何利用 `ftell()` 来读取并打印出文本文件的内容长度: ```c #include <stdio.h> int main(void) { FILE *file = fopen("example.txt", "rb"); // 打开二进制模式下的文件 if (file == NULL){ printf("无法打开文件"); return 1; } fseek(file, 0L, SEEK_END); // 将文件内部指针移动到结尾 long fileLen = ftell(file); // 获取从起始点到现在的位移 printf("文件大小:%ld 字节\n", fileLen); fclose(file); return 0; } ``` 在这个程序里,我们首先打开了名为 `"example.txt"` 的文件,在读取之前将文件内的光标通过 `fseek()` 定位到了最末端 (`SEEK_END`) 。然后调用了 `ftell()` 得到了此时相对于文件头的距离也就是整个文件的实际尺寸。 ### 注意事项 1. 如果您正在对非标准流进行操作(例如管道、终端等),那么结果可能是不确定甚至负数。 2. 对于某些非常大的文件而言,`ftell()` 可能不足以存储其完整的偏移值;这时你需要考虑平台提供的替代方案,比如 `_ftelli64()` 或者 POSIX 规范下提供的 `ftello()` 和 `fgetpos()/fsetpos()` 组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值