下面有一个示例函数(由C / C ++编写)。我的问题是它在iOS 32位版本上运行良好,但在iOS 64位版本(iPhone 5s或更高版本)上它无法运行,iOS值64位上的r值始终等于0
我对这个问题没有更多的了解。请帮帮我!
long __loadData(FILE *f,UInt32 offset,size_t len,UInt8* d)
{
if(f)
{
if (fseek(f, offset, SEEK_SET) < 0) return 11;
size_t r = fread(d,1,len,f);
return r - len;
}
return 1;
}
答案 0 :(得分:1)
尝试:
size_t r = fread(d, (size_t)1, len, f);
我怀疑nitems
基于体系结构大小,但声明为size_t
:
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
这样的陈述难以调试:
if (fseek(f, offset, SEEK_SET) < 0) return 11;
相反,请将其分解:
long loadData(FILE *stream, UInt32 offset, size_t length, UInt8* data)
{
if(stream) {
int status = fseek(stream, offset, SEEK_SET);
if (status == -1) {
printf("fseek errno: %d", errno);
return 11;
}
size_t bytesRead = fread(data, 1, length, stream);
if (bytesRead == 0) {
if (ferror(stream) {
printf("fread ferror");
}
if (feof(stream) {
printf("fread feof");
}
}
}
return 1;
}
现在您可以单步执行,如果出现错误,错误编号将打印输出。
通常为了清晰起见而写,不要忽略错误消息。更好的命名有助于理解,为未来的开发人员写作,甚至可能是你。
注意:代码是用SO编写的,未经过测试。