用数据填充未指定大小的数组
Posted
技术标签:
【中文标题】用数据填充未指定大小的数组【英文标题】:Fill Array of unspecified Size with data 【发布时间】:2020-04-07 19:25:45 【问题描述】:所以我现在正在学习 C++,我现在很困。我已经在 Internet 表单中研究了一段时间,但找不到解决我的问题的方法。也许是因为我不知道要照顾什么..
对于可能具有误导性的标题,请原谅,但问题是:
假设我有一个名为 Data 的结构,其中包含一个 int 数组和一些其他成员
struct Data
...
uint8_t values [];
现在我有一个方法测试
void test (uint8_t *buffer, size_t buffer_size)
...
在该方法中,我创建了一个 Data 实例,我想将存储在缓冲区中的值分配给该 Data 实例的数组,但我不知道如何做到这一点。 不确定,但也许我需要一个 指针指针?
提前致谢! 干杯
【问题讨论】:
你在找std::vector
您不应将指针用于您显示的任何代码。除非这是学术要求。
嗯,它是一种学术要求(不使用指针,我有一个我必须使用的框架,其中包括结构和方法)。
如果您不允许使用 std::vector,您可以使用 new[] 和 delete[] 创建自己的矢量类
相关:https://***.com/questions/13431567/how-to-make-an-array-with-a-dynamic-size-general-usage-of-dynamic-arrays-maybe
【参考方案1】:
在 c++ 中,您可以使用 STL std::vector。你可以声明它:
struct Data
...
std::vector<uint8_t> values;
然后在方法测试中:
void test (uint8_t *buffer, size_t buffer_size)
...
struct Data istanceData;
for (int i=0 ; i < buffer_size; ++i)
istanceData.values.push_back(buffer[i]);
如果您想在“测试”函数之外使用它,请记住动态分配结构数据(并返回它的指针)。 您还可以将一个额外的参数传递给“test”函数,并以这种方式将 istanced Struct Data 与引用一起传递:
void test (uint8_t *buffer, size_t buffer_size, struct Data &instanceData)
...
for (int i=0 ; i < buffer_size; ++i)
istanceData.values.push_back(buffer[i]);
【讨论】:
如果有用请投票 不能,我还没有足够的声望以上是关于用数据填充未指定大小的数组的主要内容,如果未能解决你的问题,请参考以下文章
C 语言字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )