复制局部变量中的char*数组

copy char* array in local variable

本文关键字:数组 char 局部变量 复制      更新时间:2023-10-16

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::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"})};

您首先需要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;
}