c++ - 存储动态长度数据 'inside' 结构

标签 c++ c algorithm data-structures

问题陈述: 用户提供了一些我必须存储在结构中的数据。我收到的这些数据采用一种数据结构,允许用户向其中动态添加数据。

要求:我需要一种方法将此数据“内部”存储在结构中,连续

例如。假设用户可以将我必须存储的字符串传递给我。所以我写了这样的东西:

void pushData( string userData )
{
    struct 
    {
       string junk;
    } data;

    data.junk = userData;
}

问题: 当我进行这种存储时,实际数据并没有真正存储在结构“内部”,因为字符串不是 POD。当我收到 vector 或列表时会出现类似的问题。

然后我可以做这样的事情:

void pushData( string userData )
{
    struct 
    {
       char junk[100];
    } data;    

    // Copy userdata into array junk
}

这将数据存储在结构“内部”,但是,我不能对用户可以提供的字符串大小设置上限。

有人可以建议一些方法吗?

附言:我阅读了一些关于可序列化性的内容,但无法真正弄清楚它是否对我的情况有帮助。如果这是前进的方式,有人可以提出如何进行的想法吗?


编辑:

  1. 不,这不是家庭作业。
  2. 我已经编写了一个可以通过消息队列传递这种结构的实现。它适用于 POD,但我还需要扩展它以传递动态数据。

消息队列是这样取数据的:

我。给它一个指针并告诉它应该读取和传输数据的大小。

二。对于普通的旧数据类型,数据存储在结构内部,我可以轻松地将此结构的指针传递给消息队列给其他进程。

三。但是在 vector/字符串/列表等的情况下,实际数据不在结构内部,因此如果我传递这个结构的指针,消息队列将不会真正传递实际数据,而是传递存储在内部的指针这种结构。

可以看到thisthis .我正在努力实现类似的目标。

最佳答案

void pushData( string userData )
{
    struct Data
    {
       char junk[1];
    };

    struct Data* data = malloc(userData.size() + 1);
    memcpy(data->junk, userData.data(), userData.size());
    data->junk[userData.size()] = '\0'; // assuming you want null termination
}

这里我们使用长度为 1 的数组,但我们使用 malloc 分配结构,因此它实际上可以具有我们想要的任何大小。

关于c++ - 存储动态长度数据 'inside' 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15263485/

相关文章:

java - N 数串接 N 次的模数

algorithm - 具有最多和最少比较的堆排序输入

algorithm - 归并排序算法中的递归关系

c++ - 初始化具有不确定值的对象

c++ - 包括 2 个类的 .h 文件

c++ - GPU循环: avoid warp divergence & implicit syncthreads

c - gcc -O 优化 : Help me understand the effect

android - OpenCV Native Android cvtColor 崩溃

C++ double free or corruption (out) 错误

c - 人们真的用 C 做 OO 吗?