【发布时间】: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 这回答了我的一个问题。谢谢!
标签: c++ arrays class member chararray