使用字符串文字分配 char 数组类成员
Posted
技术标签:
【中文标题】使用字符串文字分配 char 数组类成员【英文标题】:Assign a char array class member using string literal 【发布时间】:2021-06-08 18:21:48 【问题描述】:如果我这样创建我的课程:
class MyCLass
private:
char name[25];
public:
MyClass();
MyClass(char name[]);
;
MyClass::MyCLass()
stringCopy("", this->name);
MyCLass::MyClass(char name[])
stringCopy(name, this->name);
其中stringCopy
是我复制两个字符数组的函数,当我在main
函数中创建对象MyClass obj("John");
时,名称分配正确,但我收到以下警告:ISO C++11 does not allow conversion from string literal to 'char *'
,所以我问自己:将 char 数组初始化为类成员的正确和最佳方法是什么?
首先,我不喜欢我初始化char name[25];
的方式,但唯一的选择是使用动态内存。还有比这两个更好的选择吗?
另外,虽然我在编译代码后得到的消息只是一个警告,但我宁愿避免在我的代码中出现这种潜在的冲突。除了使用名称创建一个 char 数组,然后创建一个对象并将这个新变量作为参数传递之外,还有其他方法可以避免这个问题吗?
编辑:我错过了那个细节:我需要使用 char 数组。不允许使用任何字符串。
【问题讨论】:
构造函数MyCLass::MyClass(char name[])
需要是MyCLass::MyClass(const char name[])
。字符串文字是 const char[]
。
在 C++ 中为您自己的理智使用 std::string
。使用 C 字符串只不过是一团糟,尤其是在这种情况下,您的长度限制 (25
) 没有在任何地方宣传,也没有记录在案,也不容易被发现。
如果必须使用字符数组,请查看str*()
标准函数,例如stdcpy
和strcmp
。否则使用std::string
。
@tadman 我完全同意你的看法,但使用 cString 是这项任务的要求。此外,鼓励创建我自己的 stdcpy 函数。
@FrançoisAndrieux 这回答了我的一个问题。谢谢!
【参考方案1】:
鉴于 cmets 中的建议,您可能会采取一些措施:
class MyCLass
private:
std::string name;
public:
MyClass(std::string & n = ""):name(std::move(n));
;
在这种复制中使用StringCopy()
函数没有意义,标准库中的函数已经做得很好()
【讨论】:
所有这些都可以解析为单个ctor,MyClass(std::string s = "") : name(std::move(s))
以上是关于使用字符串文字分配 char 数组类成员的主要内容,如果未能解决你的问题,请参考以下文章