C++ 如何设置类的char*成员?使用strcat还是其他什么?

C++ 如何设置类的char*成员?使用strcat还是其他什么?,c++,string,C++,String,我有一个非常简单的类,包含一些char*成员。设置其值的最佳方法是strcat吗 class CImage { public: CImage() {}; char* Name; }; void AddImage(const char* Name) { CImage* img = new CImage(); strcpy(img->Name, Name); // Is this correct or the best way? } 强烈建议您删除cha

我有一个非常简单的类,包含一些char*成员。设置其值的最佳方法是strcat吗

class CImage {
public:
    CImage() {};

    char* Name;
};

void AddImage(const char* Name)
{
    CImage* img = new CImage();

    strcpy(img->Name, Name); // Is this correct or the best way?
}

强烈建议您删除char*并使用std::string

使用char*作为成员,您需要自己在构造函数中分配内存,并将析构函数中的内存释放给指针。此外,您还需要管理异常,并在每次访问基础数据时对其进行手动管理。 此外,你还必须确保你的课程符合以下要求


简言之,有太多的地方你可以轻易地击中自己的脚或头部,所以最安全和最好的方法是使用std::string作为成员,省去所有麻烦。

你必须首先动态分配足够的内存来存储这样的字符串

img->Name = new char[strlen(Name) + 1];
strcpy(img->Name, Name);
如果这样做,那么应该使用delete[]释放内存

也应考虑在构造函数中对字符串及其初始化进行包封。


存储字符串的最佳方法是STD::String

考虑使用适当的C++字符串代替C样式char。最终。或者他可以使用vector,如果此数组用于C函数Windows API,或者需要连续内存分配。@Naszta:std::string保证在C++11中连续存储其内存。另外,std::string对c函数有c_str。@JesseGood:在c++11中是这样的。不幸的是,许多产品代码都是在STL的旧版本中编译的,这与C++11不兼容。一些std::string实现并没有以针对短字符串进行优化的方式来实现,因此在多平台代码中,最好按照先前标准中的描述使用它们。另一方面:如果他的编译器支持C++11,他应该使用std::string。@JesseGood:还有一件事:C_str对您没有帮助,当您从C函数获得文本时,例如..@Naszta:AFAIK,几乎所有主流编译器都已经遵守了连续的内存分配要求。在C++中,使用C风格的字符串只想在将所有权转移到C风格API或通过一个API时才有意义。即使在这种情况下,如果所讨论的成员是类成员,也应该将原始数据包装在std::string中。您应该使用内置类型vector、string等自动处理内存。