簡體   English   中英

如何將int和char數組都寫入文件

[英]How can I write both an array of int and array of char to a file

我試圖在二進制文件中寫入和讀取一個整數數組。 這兩個功能或多或少看起來像這樣。

savefunction

int numbers[6]={0, 2, 3, 3, 0, 1};
FILE *file;
if(file=fopen(filename, "wb")==NULL)
{
    printf("Something went wrong reading %s\n", filename);
    return 0;
}
else
{
    int i;
    for(i=0; i<6; i++)
        fprintf(file, "%d", numbers[i]);
}
fclose(file);

loadfunction

FILE *saved_data;
int errors=0;
if((saved_data=fopen(filename, "rb"))==NULL)
    errors++;
else
{
    fread(first, sizeof(int), 1, saved_data);
    fread(second, sizeof(int), 1, saved_data);
    fread(third, sizeof(int), 1, saved_data);
    fread(fourth, sizeof(int), 1, saved_data);
    fread(fifth, sizeof(int), 1, saved_data);
    fread(sixt, sizeof(int), 1, saved_data);
}
fclose(saved_data);

現在,當我調試程序時,調試器告訴我第一個元素如下

(gdb) print first
$1 = (int *) 0x7fff5fbff968
(gdb) print *first
$2 = 858993200

我聽不懂 使用編輯器打開時的文件顯示023301

fread的補充功能是fwrite ,而不是fprintf 使用fprintf所做的就是將整數作為文本而不是二進制形式放入文件中。

另外,請確保傳遞一個指向fread的指針,而不是整數。 您沒有顯示firstsecond的聲明,但是如果您聲明了類似

int first, second, third, fourth, fifth, sixt;

那么您需要使用類似

fread(&first, sizeof(int), 1, saved_data);

而不是

fread(first, sizeof(int), 1, saved_data);

由於您的整數已經在數組中,因此您可以使用

fwrite(numbers, sizeof(int), 6, file);

並完全避免for循環。

如果您不反對將文件始終保持文本狀態,則可以將fopen更改為以文本形式打開,並更改read語句以文本形式讀取它們。 從目前的情況來看,您似乎始終不一致地將文件作為一個部分當作文本,然后將其作為另一部分當作二進制文件,這可能會損壞文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM