在本地变量中复制char *数组

时间:2013-08-28 07:05:54

标签: c++ pointers

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?

4 个答案:

答案 0 :(得分:2)

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

提示:请考虑改为使用std::string

答案 1 :(得分: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"})};

答案 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;
}