[英]How can I write both an array of int and array of char to a file
我試圖在二進制文件中寫入和讀取一個整數數組。 這兩個功能或多或少看起來像這樣。
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);
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
的指針,而不是整數。 您沒有顯示first
, second
的聲明,但是如果您聲明了類似
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.