显示字符数组C++时出现奇怪字符

Strange characters when displaying the char array C++

本文关键字:字符 数组 C++ 显示      更新时间:2023-10-16

我无法正确显示信息。在文本中显示了额外的字符。很可能是零字符的问题,但我没能消除。

第一个文件:person.h这里我描述一个简单的类。

#ifndef PERSON_H_INCLUDED
#define PERSON_H_INCLUDED
#include <string>
using std::string;
class Person
{
private:
    static const int m_iLIMIT = 25;
    string m_sLname;         // lastname
    char m_cFname[m_iLIMIT];    // firstname
public:
    Person () { m_sLname = ""; m_cFname[0] = ''; }  // #1
    Person(const string & sLn, const char * pcFn = "Adam"); // #2
    // show lastname и firstname
    void Show() const;          // format: firstname lastname
    void FormalShow() const;    // format: lastname, firstname
};
#endif // PERSON_H_INCLUDED

第二个文件:p_functions.cpp这里我定义类方法

#include "person.h"
#include <iostream>
#include <string>
#include <cstring>
using std::string;
using std::cout;
using std::cin;
using std::endl;
// #2
Person::Person(const string & sLn, const char * cFn)
{
    m_sLname = sLn;
    strcat(m_cFname, cFn);
}
void Person::Show() const
{
    cout << "First format: " << m_cFname << ", " << m_sLname << endl;
}
void Person::FormalShow() const
{
    cout << "Second format: " << m_sLname << ", " << m_cFname << endl;
}

第三个文件:main.cpp这里是测试方法

#include <iostream>
#include "person.h"
using namespace std;
int main()
{
    Person one;
    Person two("Smith");
    Person three("immanuel", "Kant");
    one.Show();
    one.FormalShow();
    two.Show();
    two.FormalShow();
    three.Show();
    three.FormalShow();

    return 0;
}

这是我得到的结果

在第二个构造函数中m_cFname[0]没有用0初始化使用strcpy而不是strcat

并且您将遇到名字较长的问题