我接手了以下代码:
void *buf1 = calloc(1,total_buf_size);
//build buf1 up with memcpy
int index;
void *buf2 = buf1;
for (index = 0; index < log->numentries; index++)
{
logentry_t *entry = (logentry_t*)&log->entries[index];
memcpy(buf2,entry->entryname,sizeof(entry->entryname));
buf2 = buf2 + (int)sizeof(entry->entryname);
memcpy(buf2,&entry->entrysize,sizeof(entry->entrysize));
buf2 = buf2 + (int)sizeof(entry->entrysize);
memcpy(buf2,&entry->updatesize,sizeof(entry->updatesize));
buf2 = buf2 + (int)sizeof(entry->updatesize);
memcpy(buf2,&entry->numupdates,sizeof(entry->numupdates));
buf2 = buf2 + (int)sizeof(entry->numupdates);
int j;
for (j = 0; j < entry->numupdates; j++)
{
memcpy(buf2,&entry->offsets[j],sizeof(entry->offsets[j]));
buf2 = buf2 + (int)sizeof(entry->offsets[j]);
}
int k;
for (k = 0; k < entry->numupdates; k++)
{
memcpy(buf2,&entry->sizes[k],sizeof(entry->sizes[k]));
buf2 = buf2 + (int)sizeof(entry->sizes[k]);
}
memcpy(buf2,entry->data,entry->updatesize);
}
我有一个交易日志需要遍历,需要将每个日志条目的数据写入文件中的一行。目前它使用memcpy来构建所有条目的缓冲区,并一次性将它们全部写入文件。有没有更好的方法将内存复制和扩展到buf2中?
fwrite()
为你完成缓冲工作。 - user3125367entry->entryname
。其他的struct
字段可以使用fprintf(..."%d",...)
输出为文本,例如?而且一个NULL
指针可以打印为 "void" 或 "null" 等等。 - Weather Vanevoid *buf2 = buf1;
。然后你执行buf2 = buf2 + (int)sizeof(entry->entryname);
。buf2 + x
部分是未定义的。void
没有大小,因此你不能说:“在这个数组/指针中给我第 n 个void
-thing 的地址”。 - EOF