2011-04-27 82 views
0

我寫了動態數組到文件(100寬度)然後我從文件中讀取它。C上的文件操作

但我意識到我無法從內存中讀取所有的malloc元素。

我的代碼例子如下:

main() 
{ 
    FILE *file; 
    int *numbers; 
    int *numbers2; 

    numbers = (int *)malloc(100*sizeof(int)); 
    numbers2 = (int *)malloc(100*sizeof(int)); 


    int i,j,tane; 

    file=fopen("numbers.txt","w++"); 

    for(i=0;i<100;i++) 
    { numbers[i]=i;} 

    if(file==NULL) 
    {printf("Error:File cannot open \n"); 
    return 1; 
    } 


    else { 
      fwrite(numbers,4,100,file); 

     } 
    rewind(file); 

    printf("Numbers read from file:\n"); 
    tane=fread(numbers2,4,100,file); 
    for(i=0;i<tane;i++) 
    { printf("%d ",numbers2[i]);} 


    fclose(file); 
    getch(); 
} 

我看到被C 0-25印刷元件。 (0到100)

請問你能幫我嗎?我不明白,所有的元素都不打印。

問候......

回答

2

您在文本模式打開你的文件,但你寫二進制數據。改爲嘗試fopen("numbers.txt", "wb+")

1

我猜sizeof (int)在您的實現是不是4

我敢肯定它是sizeof (int)雖然。嘗試使用sizeof (int)而不是魔術常數。更好的做法是將對象本身作爲操作數使用,以便sizeof ...

fwrite(numbers, sizeof *numbers, 100, file); 
/*  also get rid of the MAGIC 100  */ 
+0

+1我不認爲這是OP的問題,但它足夠重要:) – MByD 2011-04-27 23:02:11

+0

是啊...當我第一次看到他只回到最初陣列的1/4時,這是我最初的想法...但是然後我注意到沒有'b',並且在文本模式下閱讀時,Windows意識到'26'爲EOF:/ – pmg 2011-04-27 23:05:33