如何解决奇怪的输出打印字符数组
人工标题
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
的局部变量,这意味着当您在 {{1} 中返回时,类变量 name
仍然是未初始化的},因此是奇怪的输出。
getName
声明也不正确,C++ 不允许可变长度数组或具有未指定边界的数组,除非它们被立即初始化,在这种情况下,将根据指定字符串的大小推断大小。
关于这一点,警告必须由您的编译器发出,如果没有,请启动它们,或者更好的是,将警告视为错误,您将拥有更健壮的代码。
为了赋值,你应该继续使用指针,一个小问题出现了,因为 C++ 不允许将字符串文字赋值给 char name[];
变量,如果你使用 {{1 }},您的编译器可能允许前者,但根据 C++ 规则,这是非法的。
应用上述更正后,您的代码应该看起来更像这样:
char*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。