[英]Strange output printing char array
class human
{
char name[];
public:
void setName(char nameValue[]);
char* getName();
}
void human::setName(char nameValue[])
{
char name[] = "walter";
}
char* human::getName()
{
return name;
}
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
分配給 function setName
的局部變量,這意味着當您在getName
中返回 class 變量name
時,它仍然是未初始化的,因此奇怪的 Z78E6221F3993D136DZF6881。
char name[];
聲明也是不正確的,C++ 不允許可變長度 arrays 或 arrays 具有未指定的邊界,除非它們立即被初始化,在這種情況下將推斷出分配的字符串大小。
關於這一點,警告必須是由您的編譯器發出的,如果沒有,請啟動它們,或者更好的是,讓它將警告視為錯誤,您將擁有更健壯的代碼。
出於分配的目的,您應該只提前 go 並使用指針,出現一個小問題,因為 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.