从常量字符数组初始化为动态分配的常量字符数组

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

本文关键字:字符 数组 常量 动态分配 初始化      更新时间:2023-10-16

我正在尝试编写将常量字符数组分配给动态分配的常量字符数组的代码。我试着这样做

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

但是我收到一个错误("数组新 [-permissive]中的括号初始值设定项")。

我有两个问题:

  1. 我该如何解决它 - 就像关闭它一样(我正在使用代码::块 16.01)?

  2. 我可以以某种方式初始化动态分配的常量字符数组吗?

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

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

您无法直接从另一个数组复制初始化数组,因此会出现错误。您要么需要手动复制元素(或使用std::copy),要么更好的是,如果您想要一个"复制"的数组,请使用std::array<char, 4>代替。

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