从 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]")。
我有两个问题:
我该如何解决它 - 比如关闭它(我正在使用 Code::Blocks 16.01)?
我能否以其他方式初始化动态分配的 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];
我正在尝试编写将 const char 数组分配给动态分配的 const char 数组的代码。 我试着这样做
const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new const char[4](staticArray);
但是我得到一个错误 ("parenthesized initializer in array new [-fpermissive]")。
我有两个问题:
我该如何解决它 - 比如关闭它(我正在使用 Code::Blocks 16.01)?
我能否以其他方式初始化动态分配的 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];