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

Initializing to a dynamically allocated const char array from a const char array

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

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

但是我得到一个错误 ("parenthesized initializer in array new [-fpermissive]")。

我有两个问题:

  1. 我该如何解决它 - 比如关闭它(我正在使用 Code::Blocks 16.01)?

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

您不能直接从另一个数组 copy-initialize 一个数组,因此会出现错误。您需要手动复制元素(或使用 std::copy),或者更好的是,如果您想要 "copy"-able 数组,请改用 std::array<char, 4>

但是,正如评论中提到的,最好的方法可能是使用 std::string here, and use its std::string::c_str() 成员函数,以防您需要将 const char* 指针传递给旧的 C-like 接口。

重载新运算符即可完成您的工作。

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];