Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中无符号字符指针的前缀?_C_Arrays_Pointers - Fatal编程技术网

C中无符号字符指针的前缀?

C中无符号字符指针的前缀?,c,arrays,pointers,C,Arrays,Pointers,在C语言中,我将二进制数据从文件读入vardata,如下所示: 无符号字符*数据; 数据=malloc(大小); int read_size=fread(数据,1,大小,fp); 我想在var数据前面加上文件的。我如何才能做到这一点? 它不是合法的C字符串,因为它是可能到处都是空字节的二进制数据 我知道要确保为它分配足够的内存,我只是不知道如何实际预处理它。定义自己的存储数据格式: <uint64_t datalength><string name><char[d

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

无符号字符*数据;
数据=malloc(大小);
int read_size=fread(数据,1,大小,fp);
我想在var
数据
前面加上文件的
。我如何才能做到这一点?
它不是合法的C字符串,因为它是可能到处都是空字节的二进制数据


我知道要确保为它分配足够的内存,我只是不知道如何实际预处理它。

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

<uint64_t datalength><string name><char[datalength] contents>
  • 为结构分配足够的空间:sizeof(命名的文件)+strlen(命名)+1+\u数据大小
  • strcpy(名称,_名称)
  • 内容=名称+strlen(名称)+1
  • 将数据保存到内容指针
    memcpy()
    ,直接读取,等等
  • 为数据分配足够的内存
  • 将前缀复制到其中
  • 在2.中复制的内容后面获取引用
  • 将此引用传递到
    fread()

  • memcpy
    有什么问题?它是用于以后的存储/记录还是供程序使用?问题出在哪里?更具体一点。@DavidHeffernan
    memcpy
    可能就是我要找的。我不知道,我对C有点陌生。说你的尺寸只能达到99999,文件名是fred。您希望数据是fred1还是fred00001?预先分配已知大小很容易,但如果它是可变大小,则需要预先分配最大值,并从数据开始的位置开始。在步骤3中,如何仅获得对其中一部分的引用?Nvm我得到了它。谢谢
    struct named_file {
        char* contents;
        uint64_t datasize;
        char name[]; // contents begin directly after the name.
    }