0

C++新手。

我有以下类,它的参数是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 可以吗?

4

4 回答 4

2

您需要为目标指针分配足够的内存,然后使用std::copy.

提示:考虑std::string改用。

于 2013-08-28T07:07:22.723 回答
1

我会建议您使用的解决方案,std::stringstd::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"})};
于 2013-08-28T07:31:41.850 回答
0

您首先需要元素的数量Post- 需要作为另一个参数传入,除非Post定义为最后一个元素为 NULL,在这种情况下,您需要首先计算非 NULL 元素。

一旦知道这一点,就可以为arr.

最后,您可以通过分配指针值来执行浅拷贝(例如arr[i] = Post[i],或通过复制每个字符串来执行深拷贝。您还没有告诉我们您需要哪个。

于 2013-08-28T07:10:49.913 回答
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;
}
于 2013-08-28T07:32:38.590 回答