Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Dynamic_Vector - Fatal编程技术网

C++ 如何使用以下约束动态创建固定长度字符串数组

C++ 如何使用以下约束动态创建固定长度字符串数组,c++,arrays,dynamic,vector,C++,Arrays,Dynamic,Vector,约束条件是它应该是连续内存。原因是,这将被发送到另一种语言的遗留代码,该代码希望以该格式作为2D数组 所以本质上我想发送 char *temp[20] = { "abc", "def"}; etc,其中abc、def是20字节长度的空间的一部分。 现在,我想动态创建这个数组,并向其中添加尽可能多的20字符或更少的字符串 然后将其作为数组发送到不同的层中。 最好的方法是什么。std::vector就可以了 vector允许为更多字符串动态分配更多内存,类型std::array确保vector的每

约束条件是它应该是连续内存。原因是,这将被发送到另一种语言的遗留代码,该代码希望以该格式作为2D数组

所以本质上我想发送

char *temp[20] = { "abc", "def"};
etc,其中
abc、def
20
字节长度的空间的一部分。 现在,我想动态创建这个数组,并向其中添加尽可能多的
20
字符或更少的字符串

然后将其作为数组发送到不同的层中。
最好的方法是什么。

std::vector
就可以了

vector
允许为更多字符串动态分配更多内存,类型
std::array
确保
vector
的每个成员实际上是20个字符(请确保与任何数组一样验证副本等的边界)


这是针对新的C++标准Irc,所以旧编译器可能不支持它。那么,请改用boost.array。

为什么要问您是否已经给出了答案作为标记?使用std::vector…要传递多少字符串?如果它不是固定的,那么
std::vector
是一个不错的选择。谢谢,但是如果我使用的东西没有std::array支持怎么办?@AMM:Try
std::tr1::array
。除非你的编译器是古老的,否则你很有可能拥有它。@AMM-然后你可以使用boost.Array,或者只是创建一个封装20个字符数组的类(这就是
std::Array
所做的)。向量的
T
必须是可赋值的,而
char[]
不是。谢谢,定义我自己的类会导致填充问题吗?我可以用它作为一个连续的位置吗?也就是说,如果我说struct{char[20]temp;…define copiers and initializer}会有填充问题吗?还是只需要20个字符length@AMM-使用atribute-packet(gcc)或#pragma-pack(MSVC),或编译器拥有的任何其他对齐控制选项(如果其关键)。唯一的另一种方法是使用普通的旧标准C数组,带有
malloc
s和
realloc
s。