复制局部变量中的char*数组
copy char* array in local variable
C++新手。
我有下面的类,它的参数是CCD_,如何将其复制到成员变量char*
?之后我需要知道数组的大小?
class TestParam {
public:
char*[] arr;
TestParam (const char* Pre, char* Post[]){
arr = Post;
}
};
....
TestParam testParam[1] = { TestParam ("aa", (char*[]){"bb","cc","dd"})};
我知道std::string,但我不得不使用char*
,因为我在代码中像上面那样初始化对象。通过std::string是否可能?
您需要为目标指针分配足够的内存,然后使用std::copy
。
提示:请考虑改用std::string
。
我建议使用std::string
和std::vector
的解决方案,如下所示:
class TestParam {
public:
std::vector<std::string> arr;
TestParam (const std::string& Pre, const std::vector<std::string>& Post){
arr = Post;
}
};
...
TestParam testParam[1] = { TestParam ("aa", {"bb","cc","dd"})};
您首先需要Post
中的元素数量,该数量需要作为另一个参数传入,除非Post
被定义为最后一个元素为NULL,在这种情况下,您需要首先计算非NULL元素。
一旦知道了这一点,就可以为char*
0分配内存。
最后,您可以通过分配指针值来执行浅层复制(例如arr[i] = Post[i]
),也可以通过复制每个字符串来执行深层复制。您还没有告诉我们您需要哪个。
#include <iostream>
#include <vector>
class TestParam {
public:
template <std::size_t N>
TestParam(const char* pre, const char* (&arr_ref)[N]) {
arr.reserve(N);
for(const char* p: arr_ref) {
if(p) arr.push_back(std::string(p));
}
}
std::vector<std::string> arr;
};
int main() {
const char* a[] = { "Hello", " " , "World" };
TestParam param((char*)0, a);
for(const std::string& s: param.arr) std::cout << s;
std::cout << std::endl;
return 0;
}