如何使用char **创建n个字符串数组?
char** lit;
*lit = (char*)calloc(this->nr_param, sizeof(char*));
for(int i = 0; i < this->nr_param; i++)
lit[i] = (char*) calloc(this->nr_param, sizeof(char));
这是这样的吗?
如果是这样,我如何访问元素?让我们说我的数组将包含以下元素:
aaab,abba,baab;
我想要这个结构:
lit[0] = "aaab";
lit[1] = "abba";
lit[2] = "baab";
我告诉他们怎么样?
答案 0 :(得分:8)
像这样:
// allocate memory for n char pointers dynamically.
char ** lit = static_cast<char**>(::operator new(n * sizeof(char*)));
for (unsigned int i = 0; i != n; ++i)
{
lit[i] = static_cast<char*>(::operator new(length_of_string_i)); // #1
// populate lit[i] with data
}
您需要一些方法来确定i
字符串的长度,您需要在标记为#1的行中正确粘贴它。请注意sizeof(char) == 1
,因此您不需要在内部分配中乘以任何内容。
(如果您愿意,可以使用std::malloc
代替::operator new
,但是您必须#include <cstdlib>
。)完成后不要忘记清理!
这当然只是你要求的字面翻译。在C ++中,您通常更喜欢对象创建而不是原始内存分配,如下所示:
// construct n char pointers dynamically
char ** lit = new char*[n];
for (unsigned int i = 0; i != n; ++i)
{
lit[i] = new char[length_of_string_i];
// populate lit[i] with data
}
但你应该认真地从不使用array-new。这不是一个好的概念,很少有很好的C ++。
所以,你根本不应该这样做,而应该使用:
std::vector<std::string> lit(n);
答案 1 :(得分:2)
您可以以类似的方式使用c ++向量和字符串:
#include <vector>
#include <string>
#include <iostream>
int main() {
std::vector<std::string> lit;
lit.push_back("aaab");
lit.push_back("aab");
lit.push_back("aabb");
lit[0][0] = 'z';
std::cout << lit[0] << std::endl;
}