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

fread not working as expected on 64-bit iOS

本文关键字:常工作 工作 64位 iOS fread      更新时间:2023-10-16

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

现在,您可以逐步完成,如果出现错误,错误编号将打印输出。

一般情况下,为了清晰起见,不要忽略错误消息。更好的命名有助于理解,为未来的开发人员写作,甚至可能是你。

注:代码是用SO编写的,没有经过测试。