奇怪的输出打印字符数组

Posted

技术标签:

【中文标题】奇怪的输出打印字符数组【英文标题】:Strange output printing char array 【发布时间】:2021-02-27 21:52:15 【问题描述】:

人头

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└²╒”。

我不明白哪一部分是错的。你能告诉我我的代码有什么问题吗?

【问题讨论】:

请使用std::string 我不能。这是作业。请帮我处理字符 你的程序有很多错误。最糟糕的是使用char* 而不是std::string setName 实现让我感到困惑。您正在为新的 char name [] 变量名称分配一个常量名称。 1)将头文件中的char name []定义改为char * name。 2)分配nameValue(setName的输入到相同的“名称”变量)。不要在 setName() 中重新定义新的字符名 []。 @bkk 仅通过该更改,您的类将指向外部字符数组。如果该数组超出范围并被销毁,则类中的指针将悬空。取消引用它会导致未定义的行为。 【参考方案1】:

首先,您将nameValue 分配给函数setName 的局部变量,这意味着当您在getName 中返回它时,类变量name 仍然未初始化,因此输出很奇怪。

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;

【讨论】:

它终于可以工作了,我可以肯定,因为我更改了名称,但仍然输出最近的名称。非常感谢你,现在我只看你的代码来理解逻辑。你救了我的作业

以上是关于奇怪的输出打印字符数组的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 浮点数转字符数组输出,π常量输出,sprintf打印

如何使用NumPy字符串格式化程序打印输出字符串依赖于数组值的NumPy数组?

如何将 foreach 输出为字符串 c# // g 打印为数组而不是字符串

分配给整数时的字符串数组会产生一个奇怪的值[重复]

int的打印数组会在ada中生成奇怪的输出

处理产生奇怪结果的字节数组的字符串构造函数[重复]