gpt4 book ai didi

c++ - fread 在 64 位 iOS 上无法正常工作

转载 作者:行者123 更新时间:2023-11-28 06:26:38 30 4
gpt4 key购买 nike

下面有一个示例函数(由 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;
}

最佳答案

尝试:

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;
}

现在您可以单步执行,如果出现错误,错误编号将被打印出来。

一般来说,为了清晰起见,不要忽略错误信息。更好的命名有助于理解,为 future 的开发者写作,甚至可能是你。

注意:代码是用 SO 编写的,未经测试。

关于c++ - fread 在 64 位 iOS 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403014/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com