将列表复制到二进制文件

时间:2016-02-06 15:52:57

标签: c list file data-structures

我正在尝试将列表中结构的内容复制到二进制文件中。

这是我的结构声明:

typedef struct
{
    char dni[9];
    char nombre[100], apellido[100];
    double deuda;
} t_datos;

struct s_nodo
{
    t_datos dati;
    struct s_nodo *sig;
};
typedef struct s_nodo *t_nodo;
void newfile(t_nodo, FILE *);

在主要我用.dat文件中的一些数据填充列表,看起来没问题,因为如果我打印列表一切正常。当我尝试复制结构时,我遇到了问题列表到新的二进制文件。

//open and copy old binary file to the list...
fc = fopen("c:\\norep.dat", "w+b");
if (fc == NULL)
{
    puts("Error");
    exit(-1);
}
newfile(lista, fc);

这是我的功能:

void newfile(t_nodo lista, FILE *fc)
{
    if (lista != NULL) 
    {
        fwrite(lista->dati, sizeof(t_datos), 1, fc);
        newfile(lista->sig, fc);
    }
}

我得到的错误是:

  

错误:'fwrite'|

的参数1的类型不兼容

我知道错误可能是我将列表传递给函数的方式,我看到了fwrite的原型,但我不知道应该如何修复代码。

1 个答案:

答案 0 :(得分:2)

fwrite()的第一个参数必须是指针(const void * ,准确),在您的情况下,它不是。你必须使用&运营商的地址,就像这样

fwrite(&lista->dati, sizeof(lista->dati), 1, fc);

此外,您可能需要检查fwrite()的返回值以确保它成功,在这种情况下,因为您正在编写单个项目,它必须是1

警告:不要typedef poitners,将来可能会出现问题。如果必须,请使用某种符号作为后缀_ptr来表示它是指针( libxml-2.0使用Ptr例如)。