【记录】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试一下,好吧,完美解决。万万没想到一个怎么看都是文本的文件竟然是二进制文件。

你可能感兴趣的:(问题解决记录)