c上的二进制文件

时间:2014-12-02 04:26:48

标签: c file binary

尝试在二进制文件中保存结构数组。 我想我需要一个。

typedef struct {
    int y, o;
}num;


int main(){
    num numbers[10];
    for (i = 0; i < 10; i++){
        numbers [i].y = i;
        numbers [i].o = i * 2;
    }
    FILE *f;
    f=fopen("test","r+");

}

2 个答案:

答案 0 :(得分:1)

如果对不同体系结构和/或编译器的兼容性并不是真正令人担忧的话,您可以像编写任何数据一样编写它(在某种意义上,您编写的是您将加载它的位置)。如果必须具有兼容性,则无法使用此方法,则必须编写函数以在更抽象的级别上进行读写。

  1. 将对您数据的引用传递给第一个fwrite(),在您的情况下是指向数字的指针
  2. 在第二个参数中使用结构名称上的sizeof()函数,这告诉函数您的数据有多大。 sizeof(num)为你
  3. 使用数组的indeces数量来写入正确的文件数量。你有10个10
  4. 最后是FILE *
  5. 这里有一个简短的例子:

    typedef struct {
        int y, o;
    }num;
    
    
    int main(){
        num numbers[10];
        for (i = 0; i < 10; i++) {   // you blow array bounds, fixed
            numbers [i].y = i;
            numbers [i].o = i * 2;
        }
        FILE *f;
        f = fopen("test","r+");
        if (f != NULL) {
            fwrite(&numbers, sizeof(num), 10, f);
            fclose(f);    
        } else {
            // fopen error...
        }
    
        exit(0);
    }
    

答案 1 :(得分:0)

只需运行该代码

 #include <stdio.h>

 typedef struct {
          int y, o;
 }num;


 int main()
 {
    num numbers[10];
    int i=0;
    for (i = 0; i < 10; i++)
    {
            numbers [i].y = i;
            numbers [i].o = i * 2;
    }

    FILE *f;
    f=fopen("test","r+");

    for (i = 0; i < 10; i++)
    fprintf(f," %d %d " ,numbers[i].y,numbers[i].o);      
 }