从const char数组初始化为动态分配的const char数组

时间:2017-02-01 14:00:38

标签: c++ arrays dynamic codeblocks

我正在尝试编写将const char数组分配给动态分配的const char数组的代码。 我试着像

那样做
const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new const char[4](staticArray);

但我得到一个错误("数组new [-fpermissive]"中的括号初始值设定项。)。

我有两个问题:

  1. 我怎么能解决它 - 比如关闭它(我使用Code :: Blocks 16.01)?

  2. 我可以以其他方式初始化动态分配的const char数组吗?

2 个答案:

答案 0 :(得分:1)

让新操作员超负荷将完成您的工作。

void * operator new[](size_t n, const char *s) {
    void *p = malloc(n);
    strcpy((char *)p, s);
    return p;
}

现在可以像这样调用新的运算符:

const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new (staticArray) char[4];

答案 1 :(得分:0)

您无法直接从另一个数组复制初始化数组,因此会出错。您需要手动复制元素(或使用std::copy),或者更好的是,如果您希望使用std::array<char, 4>来复制&#34; -able数组。

但是,正如评论中所提到的,最好的可能是在这里使用std::string,并使用其std::string::c_str()成员函数,以防您需要传递const char*指针类C接口。