将char数组存储在类中,然后返回它

Tat*_*nen 1 c++ arrays return class char

我需要在类中存储一个char数组,然后返回它.我不得不承认我对指针有点困惑,并尝试了我能想到的一切,但无法让它发挥作用.这就是我所拥有的:

#include <iostream>
using namespace std;

class Test {
public:
    void setName(char *name);
    char getName();
private:
    char m_name[30];
};

void Test::setName(char *name) {
    strcpy(m_name, name);
}

char Test::getName() {
    return *m_name;
}

void main() {

    Test foobar;
    char name[] = "Testing";
    foobar.setName(name);
    cout << foobar.getName();
}
Run Code Online (Sandbox Code Playgroud)

当然,我希望setName()在类中存储字符串"Testing",getName()应该返回"Testing".但相反,我只得到第一个字母T.我做错了什么?

我想我应该使用std字符串,但首先我想了解为什么这不起作用.据我所知,这应该也适用于char数组?

sha*_*oth 6

只需返回一个指针:

const char* Test::getName() const
{
    return m_name;
}
Run Code Online (Sandbox Code Playgroud)

并为其添加一个构造函数class Test将null终止封装的数组:

Test::Test()
{
    m_name[0] = 0;
}
Run Code Online (Sandbox Code Playgroud)

这样,如果某人实例化class Test并且没有调用实例,您就不会遇到麻烦setName().

  • 我还建议使用strncpy()而不是strcpy(),因为这是C++,你应该使用std :: string而不是char指针,这是C的保留 (3认同)
  • 关于使用`std :: string`的+1.如果由于某种原因必须使用C字符串,则可以使用`std :: string`的`c_str()`成员函数返回C字符串. (3认同)