簡體   English   中英

fread無法在64位iOS上正常運行

[英]fread not working as expected on 64-bit iOS

我下面有一個示例函數(由C / C ++編寫)。 我的問題是,它在iOS 32位版本上運行正常,但是在iOS 64位版本(iPhone 5s或更高版本)上無法運行,r值在iOS 64位上始終等於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編寫的,未經測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM