C++ 成员变量不保存从函数中的成员向其添加的值

C++ 成员变量不保存从函数中的成员向其添加的值,c++,class,constructor,C++,Class,Constructor,您好,我有一个小问题,我试图从一个成员函数中为类的某个成员变量赋值。一切似乎都很好,但一旦我的程序返回到EAN::read(…);成员变量中现在有一些奇怪的字符-->“╠╠╠╠╠╠". 任何人都可以向我解释我做错了什么?谢谢 ///My class //// class EAN { char string[13]; char strStyle[18]; char styles[2]; char area[6]; char publisher[8]; char title[8]; bool

您好,我有一个小问题,我试图从一个成员函数中为类的某个成员变量赋值。一切似乎都很好,但一旦我的程序返回到EAN::read(…);成员变量中现在有一些奇怪的字符-->“╠╠╠╠╠╠". 任何人都可以向我解释我做错了什么?谢谢

///My class ////
   class EAN
{
char string[13];
char strStyle[18];
char styles[2];
char area[6];
char publisher[8];
char title[8];
bool registered;

public:
///and member functions here//
};

////First member function that is called///
bool EAN::read(std::istream& is, const Prefix& list){
char str[13];
bool keepgoing = false;
do{
    cout << "Enter a EAN(0 to quit): ";
    is >> str;
    if (str == nullptr || strlen(str) < 13){
        keepgoing = false;
        registered = false;
    }
    else{
            keepgoing = true;
            EAN(str, list); ///this is where member variable will be assigned//
            registered = true;  
            std::cout << "this is area" << area << endl; 


    }
} while (keepgoing == false);


return keepgoing;
}

////////Here is the constructor that assigns the values to member variable//
EAN::EAN(const char* str, const Prefix& list){
int keepgoing = 0, j = 3, i = 0;

string[13] = '\0';
strStyle[18] = '\0';
area[6] = '\0';
publisher[8] = '\0';
title[8] = '\0';


if (isValid(str) == 1 && str[0] == '9' && str[1] == '7'|| str[2] == '8' || str[2] == '9') {
        keepgoing = 1;
        strcpy(string, str);
        if (isRegistered(list) == true){

            char _area[6];
            int lengthArea = 0;

            while (i < 5) {
                _area[i] = str[j];
                _area[i + 1] = '\0';
                if (list.isRegistered(atoi(_area))) {
                    strcpy(area, _area); **<--- ///assign value to member variable.///**
                    lengthArea = strlen(area);
                    i = 6; // exit loop
                    keepgoing = 1;
                }
                else
                {
                    i++;
                    j++;
                }
            }

  .......more coding pretty same as above.
}
///我的类////
EAN类
{
字符串[13];
字符样式[18];
字符样式[2];
煤焦面积[6];
字符发布器[8];
字符标题[8];
bool注册;
公众:
///还有这里的成员函数//
};
////调用的第一个成员函数///
boolean::read(std::istream&is、const前缀&list){
char-str[13];
bool keepgoing=false;
做{
cout>str;
if(str==nullptr | | strlen(str)<13){
keepgoing=false;
注册=假;
}
否则{
持续=正确;
EAN(str,list);///这是分配成员变量的地方//
注册=真实;

std::cout所有这些值,您都在注销分配内存的末尾:

string[13] = '\0';
strStyle[18] = '\0';
area[6] = '\0';
publisher[8] = '\0';
title[8] = '\0';
如果要将最后一个字符设置为null,请按如下操作:

char string[13];
string[12] = '\0';

因为零索引;

嘿,伙计们,谢谢你们的帮助,如果你们仔细看的话,我会找出答案的,伙计们,我在成员函数中调用了构造函数,但我需要返回我让构造函数指定的内容

所以我丢失了
*this=EAN(str,list);


谢谢大家的帮助。

“成员变量不会保存从函数中从成员添加到它的值”-一句话:胡说八道。问题几乎总是简单的。举个简单的例子。使用C样式字符串(字符数组)的任何原因与STD::String相反?如果您想在C++中使用字符串,则应该使用它。它仍然给我相同的输出。我试图修改EA::;并且它保留了值。但只有在这个成员函数中修改了它。我建议创建一个小得多的问题示例,假设您可以注释掉很多逻辑,仍然会得到相同的错误。