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

C++ 复制局部变量中的char*数组,c++,pointers,C++,Pointers,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"})}; 我知道st

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可以吗?

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


提示:考虑使用<代码> STD::String < /Cord>。

< p>需要为目标指针分配足够的内存,然后使用<代码> STD::p>

ToIP:考虑使用<代码> STD::String < /Cord>。

< p>您需要在 POST <代码>中的元素数量作为另一个参数,除非<代码> POST <代码>定义为NULL最后一个元素,在这种情况下,您需要首先对非空元素进行计数。

一旦知道了这一点,就可以为
arr
分配内存


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

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

一旦知道了这一点,就可以为
arr
分配内存


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

我建议您使用
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"})};
类TestParam{
公众:
std::载体arr;
TestParam(const std::string和Pre,const std::vector和Post){
arr=员额;
}
};
...
TestParam TestParam[1]={TestParam(“aa”,“bb”,“cc”,“dd”});

我建议您使用
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"})};
类TestParam{
公众:
std::载体arr;
TestParam(const std::string和Pre,const std::vector和Post){
arr=员额;
}
};
...
TestParam TestParam[1]={TestParam(“aa”,“bb”,“cc”,“dd”});
#包括
#包括
类TestParam{
公众:
模板
TestParam(常量字符*pre,常量字符*(&arr\u ref)[N]){
arr.reserve(N);
用于(常量字符*p:arr_ref){
如果(p)arr.push_back(std::string(p));
}
}
std::载体arr;
};
int main(){
const char*a[]={“你好”,“世界”};
TestParam param((char*)0,a);
对于(const std::string&s:param.arr)std::cout
#include
#包括
类TestParam{
公众:
模板
TestParam(常量字符*pre,常量字符*(&arr\u ref)[N]){
arr.reserve(N);
用于(常量字符*p:arr_ref){
如果(p)arr.push_back(std::string(p));
}
}
std::载体arr;
};
int main(){
const char*a[]={“你好”,“世界”};
TestParam param((char*)0,a);

对于(const std::string&s:param.arr)std::cout,如果只有指向第一个元素的指针,则无法知道任何数组的大小。我建议使用用户定义的类型,而不是原始指针和指向指针的指针。首先阅读,然后阅读。“char*,这是字符串数组”-不准确。这里有很多错误,但最突出的是如何知道您的Post数组中有多少字符串?在知道该问题的答案之前,您无法开始解决其他问题。正如其他人所说,简单的答案是std::vector和std::string。相信我们,这似乎是另一个新的问题john Post数组中的字符串数将是固定的。如果只有指向第一个元素的指针,您将无法知道任何数组的大小。我建议使用用户定义的类型,而不是原始指针和指向指针的指针。首先阅读,然后阅读t.“char*,它是字符串数组”-不准确。这里有很多错误,但最突出的是如何知道您的Post数组中有多少字符串?在知道该问题的答案之前,您无法开始解决其他问题。正如其他人所说,简单的答案是std::vector和std::string。相信我们,这似乎是另一个新的问题john Post数组中的字符串数将被固定。它给出了“调用TestParam::TestParam(const char[3],)”时没有匹配函数……我需要将它键入(std::vector)吗?@VijayC不需要它。什么编译器(及其版本)你在使用吗?我在ubuntug++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6上使用g++。3@VijayC在构建时,尝试添加
-std=c++11
(或者如果您有较旧的版本
-std=c++0x
)选项。它提供“没有匹配的函数用于调用TestParam::TestParam(const char[3],)”……我需要将其类型转换为(std::vector)吗?@VijayC不需要它。你使用的是什么编译器(以及它的版本)?我在ubuntug++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6上使用g++。3@VijayC尝试在生成时添加
-std=c++11
(或者如果您有较旧的版本
-std=c++0x
)选项。