我有以下一段代码正常工作:
int array[16][2] = ;
void *buffer_ptr = NULL;
get_buffer(&buffer_ptr); // This is a function which gives me the address of
buffer ptr
file_read(handle, size, buffer_ptr); // This function reads and stores data into buffer_ptr
现在我想将这个读取值复制到buffer_ptr中。我现在这样做是有效的:
for (i = 0; i < 16; i++)
{
array[i][0] = *((int *)buffer_ptr+(2*i));
array[i][1] = *((int *)buffer_ptr+(2*i)+1);
}
但我相信有更好的方法可以做到这一点。
感谢。
答案 0 :(得分:0)
但我相信有更好的方法可以做到这一点。
是的,直接读入数组。不需要中间缓冲区。
我猜你的文件是一堆4字节整数,你希望它们一次两个。首先,对array
使用固定宽度类型,否则可能会得到错误的大小整数。
#include <stdint.h>
int32_t array[16][2] = {{0}};
然后直接从文件读入数组,两个4字节整数。
FILE *fp = fopen(file, "rb");
if( fp == NULL ) {
fprintf(stderr, "Could not open '%s' for reading: %s\n", file, strerror(errno));
exit(1);
}
for (int i = 0; i < 16; i++)
{
fread(array[i], 4, 2, fp);
}
我相信你甚至可以把它减少到一次阅读。
fread(array, 4, 32, fp);