2012-03-09 95 views
0

我試圖以二進制格式將某些用戶輸入寫入文件。當我看到在文件IM希望看到只有0和1,而輸出到文件打印在普通文本:以二進制格式寫入文件時輸出錯誤

FILE *f; 
    char array[8]; 
    f = fopen("numbers.bin", "ab+"); 
    if(f==NULL){ 
     printf("Could not open file!\n"); 
     system("pause"); 
     exit(1); 
     } 

    for(i=0;i<numberOfInputs;i++){ 
     printf("\nEnter number nr %i:", i+1); 
     gets(array); //get the input and place it in array 
     strcat(array, "\n"); // add a newline to the input 
     fwrite(array,sizeof(char),1,f); //write output to the file 
} 

有沒有人能夠發現什麼即時做錯了什麼?

+1

你期望「只有0和1」?!你想做什麼?用戶是否應該輸入數字(整數,更確切地說),並且希望以(與操作系統有關的)二進制格式附加這些數字?或者你想追加帶有換行符的字符串嗎? – 2012-03-09 14:27:46

+0

不要使用gets。如果文件中有大於8個字符的行,則會發生緩衝區溢出。 – 2012-03-09 14:28:53

+0

對於緩衝區溢出的原因,當標準(C11)的當前版本被釋放時,gets()最近從C語言中被移除。使用gets()的程序不會在將來的C編譯器上編譯。 – Lundin 2012-03-09 14:52:03

回答

1

由於您以字符串(gets)的形式讀取輸入,因此稍後會寫入數據。您需要使用scanf來讀取數字。

int num; 
scanf("%d", &num); 
fwrite(&num, sizeof(int), 1, f); 
+0

使用提示編輯代碼,其中im循環訪問數組並使用scanf讀取每個元素,然後將其寫入文件。我得到不可讀的輸出,所以它可能按預期工作。我會接受這一點,因爲我已經驗證了輸出:) – 2012-03-09 14:47:44

1

你只寫了一個字符。

的Try ...

fwrite(array,strlen(array),1,f); 

這些docs表明,第二個參數是寫元素的大小,三是項目的數量。你可以用另一種方式來放置這兩個,或者把sizeof(char)而不是1(這總是一個)。

請注意,如果用戶輸入的字符串長度超過6個字符,則會出現問題 - 因爲換行符和空終止符也會佔用內存。

+0

上面的代碼可以正常工作,但是當用記事本查看文件時仍然會打印「正常」文本。 – 2012-03-09 14:45:28