C++ string char**翻译

Dem*_*tor 0 c++ string char calloc

如何使用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));    
Run Code Online (Sandbox Code Playgroud)

这是这样的吗?如果是这样,我如何访问元素?让我们说我的阵列将包含以下元素:aaab,abba,baab;

我想要这个结构:

lit[0] = "aaab";
lit[1] = "abba";
lit[2] = "baab"; 
Run Code Online (Sandbox Code Playgroud)

我怎么宣布它们没关系?

Ker*_* SB 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
}
Run Code Online (Sandbox Code Playgroud)

您需要一些方法来确定i第th个字符串的长度,您需要在标记为#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
}
Run Code Online (Sandbox Code Playgroud)

但是你应该认真地从不使用array-new.这不是一个好的概念,很少有好的C++.

所以,你根本不应该这样做,而应该使用:

std::vector<std::string> lit(n);
Run Code Online (Sandbox Code Playgroud)