如何将cstring放入类中?

时间:2016-11-23 08:04:15

标签: c++

我打算用cstring完成程序 现在我需要从用户那里获得PokemonWorld的名字 并初始化

但我无法将main()中的cstring转换为类PokemonWorld

我尝试了cin >> world.setNamecin >> name; world.setName(name)

两者都失败了

class PokemonWorld {
private:
char name[10];
public:
void setName(char x[]) {
    *name = x;
};
char* getName(){
    return name;
};
};

void main() {
PokemonWorld world;
int number;
char name[10];
cout << "What is the World Name ?" ;
cin >> name;

world.setName(name);

此外,我无法使用getName返回分配给PokemonWorld的名称

以下是错误代码:

错误C3867'PokemonWorld :: getName':非标准语法;使用'&amp;'创建指向成员的指针

我应该将PokemonWorld创建为指针吗?

3 个答案:

答案 0 :(得分:0)

您需要先设置名称。在您的主要方法中,

PokemonWorld world;
int number;
char name[10];
cout << "What is the World Name ?" ;
cin >> name;
world.setName(name);
//Then get the name
    world.getName(name);

答案 1 :(得分:0)

使用cstring,您必须使用c字符串操纵器。你肯定不能将数组分配给另一个。对于您的问题,请使用strncpy_s

void setName(char x[]) {
    strncpy_s(name, 10, x, 10);
};

另外,为了避免问题,你的getter应该是:

const char * const getName() const {
    return name;
};

另外,要进行比较,请使用strncmp来连接使用strncat,...

或者,因为您使用c ++,请使用std::string

答案 2 :(得分:0)

您没有使用cstring(大多数听到“cstring”的人都会想到MFC库的CString类。)

您正在使用“C”字符串或原始字符指针。这通常是不好的做法,因为它涉及手动执行内存管理,除非您解决使用原始指针所带来的问题,否则您的代码中只会出现这些问题。

setName应为:

void setName(char const * const x)
{
    auto length = std::min(std::strlen(x), 9); // only copy up to 9 characters
    std::copy_n(x, length, name);
    name[length] = '\0';
}

...或(已经是pointed out):

strncpy_s(name, 10, x, 10);

getName应为:

char const * const getName() const
{
    return name;
}

这段代码几乎是正确的:

char name[10];
cout << "What is the World Name ?" ;
cin >> name;
world.setName(name);

...但您应该在声明它的地方初始化名称:

char name[10] = { 0 };

另外,如果用户输入超过10个字符,您会怎么做?在这种情况下,程序的堆栈将被破坏。

您可以使用std :: string来避免此问题。