显示字符数组 C++ 时的奇怪字符
Strange characters when displaying the char array C++
我无法正确显示信息。在文本中显示额外的字符。很可能是零字符的问题,但我无法消除。
第一个文件:person.h这里我描述一个简单的class.
#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] = '[=10=]'; } // #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这里我定义class方法
#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;
}
这是我得到的result
在第二个构造函数中m_cFname[0]没有初始化为0
使用 strcpy 而不是 strcat
你会遇到较长名字的问题
我无法正确显示信息。在文本中显示额外的字符。很可能是零字符的问题,但我无法消除。
第一个文件:person.h这里我描述一个简单的class.
#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] = '[=10=]'; } // #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这里我定义class方法
#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;
}
这是我得到的result
在第二个构造函数中m_cFname[0]没有初始化为0 使用 strcpy 而不是 strcat
你会遇到较长名字的问题