c++ - 奇怪的输出打印字符数组
问题描述
人头
class human
{
char name[];
public:
void setName(char nameValue[]);
char* getName();
}
人类cpp
void human::setName(char nameValue[])
{
char name[] = "walter";
}
char* human::getName()
{
return name;
}
主cpp
int main()
{
human myHuman;
char name[] = "walter";
myHuman.setName(name);
char* result3 = myHuman.getName();
cout << "My human has a name of " << result3 << endl;
return 0;
}
我分配了字符串"walter"
,但是当我打印它时,我得到“╠╠╠╠╦ß╩d└²╒”。
我不明白哪一部分是错的。你能告诉我我的代码有什么问题吗?
解决方案
首先,您要分配nameValue
给函数的局部变量setName
,这意味着name
当您将类变量返回时,它仍然是未初始化的getName
,因此输出奇怪。
该char name[];
声明也不正确,C++ 不允许可变长度数组或具有未指定边界的数组,除非它们立即初始化,在这种情况下,将根据分配的字符串的大小推导出大小。
关于这一点,警告必须是由您的编译器发出的,如果没有,请启动它们,或者更好的是,让它将警告视为错误,您将拥有更健壮的代码。
出于分配的目的,您应该继续使用指针,出现一个小问题,因为 C++ 不允许将字符串文字分配给char*
变量,如果您使用const char*
,这很容易解决,您的编译器可能允许前者,但这是非法的根据 C++ 规则。
应用上面的更正,您的代码应该看起来更像这样:
class human
{
const char* name;
public:
void setName(const char *nameValue);
const char* getName();
};
void human::setName(const char *nameValue)
{
name = nameValue;
}
const char* human::getName(){
return name;
}
int main()
{
human myHuman;
const char* name = "walter";
myHuman.setName(name);
const char* result3 = myHuman.getName();
cout << "My human has a name of " << result3 << endl;
return EXIT_SUCCESS;
}
推荐阅读
- hadoop - Hadoop webapps - 纱线用户界面
- sql - 根据另一个表更改选择中的列名
- json - 为什么这个模型不符合可解码?(一个多态的 JSON 圣诞故事)
- nginx - Kubernetes NGINX 入口控制器激活 TLSv1.1
- html - 使用媒体查询更改站点宽度
- android - Firebase Firestore 文档计数
- regex - 正则表达式按关键字拆分匹配
- listview - 从 Flutters ListView 中删除项目仅删除最后一个小部件
- node.js - 用于 NodeJS 的 selenium 以哪种日期格式保存 cookie 到期日期?
- c# - 为什么父类导致子类反序列化错误?