C++ 如何使用以下约束动态创建固定长度字符串数组
约束条件是它应该是连续内存。原因是,这将被发送到另一种语言的遗留代码,该代码希望以该格式作为2D数组 所以本质上我想发送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的每
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。