C++数组输入防越界

我是c++新手٩(๑`^´๑)۶。
要输入一个name的字符数组要防止越界。
这个name[20]是类的私有成员,我通过成员函数来输入它。
我在其他地方找到用string类来解决的方法。
但是我在类里面定义是char name[20],函数用getline不行。
但是要在类里面用string来定义name要怎么做?

反正就是要让输入的时候不会越界。。。。

或许其他的解决方法????
求大神指点。
还有如何在构造函数里面给name一个初值。

只会c不太会c++

name输入可以写一个set_name的成员函数,如:

#include <string.h>
bool class_x::set_name (char *new_name)
{
    if (strlen(new_name) >= 20) {    //字符串结尾有'\0',所以长度最大只能到19
        return (false);
    } else {
        strcpy(name, new_name);
        return (true);
    }
}

//构造函数里面给name一个初值
void class_x::class_x(void)
{
    strcpy(name, "初值");
}

//构造时设置name
bool class_x::class_x(char *n)
{
    return(set_name(n));
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-09
你可以用string类来做输入的临时变量,当输入结束后判断输入的字符数有没有超过19,没有超过直接复制到name中,如果超过19只保留前19个字符,然后再复制到name中。
void setName()
{
string tmp;
cin >> tmp;
if(tmp.length > 19) tmp.resize(19);// 当然如果是汉字 这样截断可能会有问题
strcpy(name, tmp.c_str());
}追问

我要的是输入汉字英文都可以的,请问要怎么处理呢?

追答

1,使用宽字符wchar_t
2.加一个检测汉字合法性的函数
int hzLen(const char * str, int len) // len为最大长度
{
int i, r=0;
for(i=0; i> tmp;
if(tmp.length() > 19)
{
int len = hzLen(tmp.c_str(), 19);
tmp.resize(len);// 当然如果是汉字 这样截断可能会有问题
}
strcpy(name, tmp.c_str());
}

本回答被提问者和网友采纳
相似回答