2017-05-29 79 views
0

我正在使用fwrite保存數組的元素,我試圖使用fread將以前保存的數據加載到數組中。 fread的返回值非零,這意味着它是成功的。但是當我打印數組時,它是空的,沒有打印。 我已經保存了數組到一個文件從文件加載數組

fwrite(num, sizeof(int), k, q); //num is the same array, k=no of elements, q is the file pointer 

這裏是我的代碼:

int num[50], NoOfElement; 
FILE *p; 
if(p = fopen("data.txt", "rb") == NULL) 
{ 
    printf("Error"); 
    exit(1); 
} 
fseek(p, 0, SEEK_END); 
NoOfElement = ftell(p)/sizeof(int); //no of elements in the file 
fseek(p, 0, SEEK_SET); 
fread(num, sizeof(int), NoOfElement, p); 
+1

'p'? 'freed' ??? –

+0

數組不能爲空。 –

+0

對不起,這是'fread'和'p'是文件指針 –

回答

1

您的代碼似乎罰款。這個演示程序對我來說OK:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int num[50], NoOfElement; 
    FILE *P; 
    int i; 

    // Generate test data 
    for (i = 0; i < 5; ++i) 
     num[i] = i+1; 

    // Write test data 
    P = fopen("data.txt", "wb"); 
    fwrite(num, sizeof(int), 5, P); 
    fclose(P); 

    // Overwrite the test data so we know we read it OK 
    for (i = 0; i < 5; ++i) 
     num[i] = -1; 

    // Your code for reading test data 
    if((P = fopen("data.txt", "rb")) == NULL) 
    { 
     printf("Error"); 
     exit(1); 
    } 
    fseek(P, 0, SEEK_END); 
    NoOfElement = ftell(P)/sizeof(int); //no of elements in the file 
    fseek(P, 0, SEEK_SET); 
    fread(num, sizeof(int), NoOfElement, P); 

    // Output test data (shows 1 -> 5 as expected) 
    for (i = 0; i < NoOfElement; ++i) 
     printf("%d\n", num[i]); 
} 
+0

我不認爲它正在工作..也許它顯示的值是從數組中,而不是從該文件 –

+0

@ mukeshbhadotri它正在工作。在我的示例中,我特別重寫了值爲'-1'來證明它沒有顯示原始值。你必須從文件中讀回到內存中 - 你沒有從文件中顯示任何東西。您可以複製並粘貼我的代碼並自行運行以進行檢查。 – aardvarkk

0

我可以看到兩個問題。首先是您使用未聲明的變量p(您已聲明FILE *P;且C區分大小寫)。

但是,假設這是一個轉錄錯字,而不是您的實際代碼,您也有緩衝區溢出問題。如果NoOfElement > 50,你會調用未定義的行爲和(可能)損壞你的堆棧。

無論如何,您打印數組的方式如何?

+0

'NoOfElement'永遠不會大於50,因爲首先我計算文件的字節數並將其除以sizeof(int)'。所以它總是小於50.因爲該數組的元素(> 50)存儲在該文件中,所以它不能高於值 –

+0

但是該文件可能大於'50 * sizeof(int)'( 200,假設爲32位整數)字節 –

+0

'50 * sizeof(int)= 200bytes'但是'NoOfElement = 200bytes/sizeof(int)'(結果爲50) –