我正在尝试将列表中结构的内容复制到二进制文件中。
这是我的结构声明:
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的原型,但我不知道应该如何修复代码。
答案 0 :(得分:2)
fwrite()
的第一个参数必须是指针(const void *
,准确),在您的情况下,它不是。你必须使用&
运营商的地址,就像这样
fwrite(&lista->dati, sizeof(lista->dati), 1, fc);
此外,您可能需要检查fwrite()
的返回值以确保它成功,在这种情况下,因为您正在编写单个项目,它必须是1
。
警告:不要typedef
poitners,将来可能会出现问题。如果必须,请使用某种符号作为后缀_ptr
来表示它是指针( libxml-2.0使用Ptr
例如)。