簡體   English   中英

奇怪的output打印char數組

[英]Strange output printing char array

人類 header

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分配給 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM