前缀为C中的unsigned char指针?

时间:2014-04-14 14:22:36

标签: c arrays pointers

在C中,我正在将文件中的二进制数据读入var data,如下所示:

unsigned char *data;
data = malloc(size);
int read_size = fread(data, 1, size, fp);

我想在文件的data前添加var <filename><size>。我怎样才能做到这一点?
它不是一个合法的C字符串,因为它是可能遍布整个地方的空字节的二进制数据。

我知道要确保我分配足够的内存,我只是想不出如何实际预先添加它。

2 个答案:

答案 0 :(得分:2)

  1. data分配足够的内存。
  2. 将前缀复制到其中。
  3. 获取对2 ...
  4. 中复制的内容的引用
  5. 将此引用传递给fread()

答案 1 :(得分:0)

定义您自己的存储数据格式:

<uint64_t datalength><string name><char[datalength] contents>

或者更容易在应用内使用:

struct named_file {
    char* contents;
    uint64_t datasize;
    char name[]; // contents begin directly after the name.
}
  1. 使用足够的空间分配结构:sizeof(named_file)+ strlen(_name)+ 1 + _datasize
  2. strcpy(name,_ name)
  3. contents = name + strlen(name)+1
  4. 将数据保存到内容指针。 memcpy(),直接阅读,无论如何。