C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)

本文详细分析了C语言中fseek调用失败返回非零值以及ftell返回-1的原因,主要归因于文件大小超过2G。解决方案包括使用64位版本的_fseeki64和_ftelli64函数,以及确保数据类型正确,如将pos定义为int64。通过修改代码并应用64位函数,可以成功处理大文件的定位问题。
摘要由CSDN通过智能技术生成

C 语言fseek. ftell调用失败(fseek返回非零值,ftell返回-1)


太长不看版

  • fseek调用失败,返回非零值,是因为传入的参数超过了文件尾,或者文件大于2G,需要使用fseek的64 bit版本_fseeki64.

  • ftell调用失败,返回-1,唯一一次遇到是因为文件大于2G,需要使用ftell的64bit版本,_ftelli64.

BUG重现

size_t offset = 0;
size_t file_data_size = 0,pos_start = 0,pos_end = 0;
unsigned char * buffer = NULL;
pos_start = ftell(fp);//此处正常
fseek(fp, 0L, SEEK_END);
pos_end = ftell(fp);//此处返回一个很大的值
file_data_size = pos_e
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值