c - 如何将 int 数组和 char 数组写入文件

标签 c io

我正在尝试写入和读取二进制文件中的整数数组。这两个函数或多或少看起来像这样。

保存函数

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,而不是整数。您不会显示 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 循环。

关于c - 如何将 int 数组和 char 数组写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423453/

相关文章:

C - 动态字符串释放和动态数组

c - 确定流是否已满缓冲

c - 定义全局变量来初始化结构数组

java - 我在哪里可以找到我保存在 android 上的文件?

java - 使用 JCurses 从键盘读取而不按 "enter"

java - 如何禁用 native 库输出?

c - 是指向指针数组的指针吗?

c - 很难跟踪内存损坏 - 使用 Valgrind 运行时可以正确无误地运行

c# - File.AppendAllText 中的 FileNotFoundException

c - 用c以二进制模式读取文件