【记录】c语言读写文件fseek失败,返回值-1 返回码Invalid argument 解决方法

c语言fseek失败,返回值-1 返回码Invalid argument 解决方法

问题出现在读取.cfg配置文件,.cfg文件可以直接用记事本,vs等以文本格式打开,所以我使用的代码为
FILE *fr = fopen(path,“r”);
来读文件,这样直接顺序读文件没有问题,但是因为需求我需要使用
fseek(fr, -1L,SEEK_CUR);
让文件指针指向上一个字节,却出了问题,再继续ch = getc(fr)读取内容时ch读取到的字符会直接为EOF,读取结束。

通过调试定位到问题就是fseek后,指针位置异常,经过查阅资料了解到fseek有返回值错误码,输出返回值为-1,加上代码perror(“Error\n”);可以输出错误提示Invalid argument,谷歌查找了很多类似的问题,如果fseek第二个参数数据范围过大也会出现这个错误,但是显然-1是很小的数,所以问题不在这,

网上实在是找不到解决方案了,没办法自己随便尝试了一下,就用ftell输出了指针位置,竟然是负数。。而且只要不执行fseek操作,只执行getc操作的话,数值正常迭代,但是执行fseek操作后,数值异常。这应该就是原因所在了,网上也没有查到为什么ftell会返回负数,正常情况读一个文本文件不可能出现这个问题的,走投无路把读取方式改为rb试一下,好吧,完美解决。万万没想到一个怎么看都是文本的文件竟然是二进制文件。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值