2013-07-11 50 views
0

爲什麼我越來越:爲什麼fread()在文件讀取期間失敗?

FREAD()失敗

我在VS運行此代碼2010

#include<stdio.h> 
#include<string.h> 

#define SIZE 1 
#define NUMELEM 5 

int main(void) 
{ 
    FILE* fd = NULL; 
    char buff[100]; 
    memset(buff,0,sizeof(buff)); 

    printf(" Starting to open"); 

    fd = fopen("test","r+"); 

    if(NULL == fd) 
    { 
     printf("\n fopen() Error!!!\n"); 
     return 1; 
    } 

    printf("\n File opened successfully through fopen()\n"); 

    if(SIZE*NUMELEM != fread(buff,SIZE,NUMELEM,fd)) 
    { 
     printf("\n fread() failed\n"); 
     return 1; 
    } 

}

+0

'測試'有那麼多字節嗎? –

+0

什麼是回報值?文件的內容是什麼?您是否通過fread進行調試以確定其失敗的原因? (我們提供源代碼,以便您可以通過它進行調試。) –

+0

可能您的'fread'正在達到文件末尾。 –

回答

2

因爲你沒有看過documentationfread()。它返回NUMELEM而不是SIZE * NUMELEM

+1

'SIZE'在程序中定義爲'1',所以'SIZE * NUMELEM == NUM​​ELEM'。 –

+0

@JamesMcNellis Theat仍然錯誤,但是。但是,'fread()'可以失敗並返回一個較小的數字。在這種情況下,它失敗了。因爲某些原因。 – 2013-07-11 06:53:14

1

不要比較fread()返回值與請求的大小。有時候請求文件中的數據大小不可用,並且不要與SIZE * NUMELEM進行比較,fread始終返回成功讀取的項目數。欲瞭解更多信息,請閱讀fread的手冊頁()

1

如果文件中存儲的字符數量較少,該怎麼辦? fread()返回它從文件,並在你的代碼讀取的字符量,閱讀字符數!=字符的文件數量。

相關問題