C ++ newbie。
我有以下课程,其论点是char*
,
如何将其复制到成员变量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?
答案 0 :(得分:2)
您需要为目标指针分配足够的内存,然后使用std::copy
。
提示:请考虑改为使用std::string
。
答案 1 :(得分:1)
我会建议您使用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"})};
答案 2 :(得分:0)
首先需要Post
中的元素数量 - 需要作为另一个参数传递,除非Post
被定义为具有NULL最后一个元素,在这种情况下你需要计算首先是非NULL元素。
一旦你知道,你可以为arr
分配内存。
最后,你可以通过指定指针值(例如。arr[i] = Post[i]
)来执行浅拷贝,或者通过复制每个字符串来执行深拷贝。你还没有告诉我们你需要什么。
答案 3 :(得分:0)
#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;
}