C ++ string char **翻译

时间:2012-03-10 10:42:15

标签: 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));    
这是这样的吗? 如果是这样,我如何访问元素?让我们说我的数组将包含以下元素: aaab,abba,baab;

我想要这个结构:

lit[0] = "aaab";
lit[1] = "abba";
lit[2] = "baab"; 

我告诉他们怎么样?

2 个答案:

答案 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;
  }