2015-02-09 109 views
-1

我有一个示例函数(由C/C++编写)。我的问题是它在iOS 32位版本上工作正常,但在iOS 64位版本(iPhone 5s或更高版本)上无法运行,在iOS 64位上r值始终等于0iOS - fread无法在iOS上正常工作64位版本

我没有更多了解这个问题。请帮帮我 !

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

尝试: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编写的,没有经过测试。

+0

感谢您的支持。但它不起作用 – Kame 2015-02-09 05:31:51

+1

尝试逐步调试程序,看看32位和64位行为有什么不同。 – 2015-02-09 06:20:07