C 结构体可以工作吗?

标签 c struct typedef

使用 fwrite,我正在编写整个结构?我们在 f1 和 f2 中吗?任何帮助将不胜感激

typedef struct {
    int field1;
    int field2;
}mystruct;

int main(int argc,char *argv[])
{

    int size=2;
    mystruct structarray [size];
    int i=0;
    for (i=0;i<size;i++)
    {
        structarray[i]=calloc(1,sizeof(mystruct));
    }

    FILE *F1;
    if (fopen("structfile","wt")==NULL){
        err_sys("cannot be opened");
    }

     i=0;
    for (i=0;i<size;i++)
    {
        structarray[i].field1=i;
    }

    fwrite(structarray[0].field1,sizeof(mystruct),size,F1);
    fclose(F1);
}

最佳答案

从概念上讲,您的方法是可行的。但是,您的代码存在一些问题:

(1) structarray 被声明为自动变量(在堆栈上分配)。没有理由为每个数组元素调用calloc();该数组已经完全分配。也许您打算初始化数组元素(例如,memset() 等)。

(2) fopen() 返回指向已打开文件的指针,但您没有将返回值分配给 F1。因此,F1 仍未初始化,因此对 fwrite() 的调用不起作用。

(3) 如果您的目的是将完整的结构数组保存到文件中(而不是特定元素),请将您的调用更改为 fwrite(),如下所示:

fwrite(structarray, sizeof(mystruct), size, F1);

(4) 始终检查 fwrite() 的返回值以确保其成功。

关于C 结构体可以工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139707/

相关文章:

c++ - 在哪里保留 typedef,我是否应该重复 typedef

c - 这真的导致了段错误(专家 C 编程 7.7)

c - 产品 key 的实现

c - 从双链表中删除

尝试保存字节顺序时的 Python struct.pack() 'struct.error: bad char in struct format'

C代码,搜索功能

c++ - typedef 在c++中别人的.h头文件中声明的函数

c - 如何在不复制代码的情况下创建不可转换的 C 类型?

c - 用C构建一棵通用树(使用链表来保存 child )

c - 我如何知道 char* 缓冲区是否包含单色图像?