0

如何使用 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"; 

没关系我如何声明它们?

4

2 回答 2

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第 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
}

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

因此,您根本不应该这样做,而应该使用:

std::vector<std::string> lit(n);
于 2012-03-10T10:44:59.983 回答
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;
  }
于 2012-03-10T10:48:29.577 回答