[英]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.