2014-04-01 74 views
0

你好我有一個小問題,我試圖從成員函數爲我的類的某些成員變量賦值。一切似乎都很好,但是一旦我的程序返回到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. 
} 
+0

「成員變量不保存從函數中的成員向其添加的值」 - 用一個詞:**廢話**。問題幾乎總是很簡單。拿出一個* short *例子。 –

+0

你使用C風格的字符串(char數組)而不是std :: string的任何原因? – ssell

+0

如果你想在C++中使用字符串,你應該使用[標準字符串類](http://en.cppreference.com/w/cpp/string/basic_string)。 –

回答

2

所有這些值,你覈銷分配內存的末尾:

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

如果你想設置的最後一個字符爲空,你做這樣的:

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

因爲零索引;

+0

它仍然給我相同的輸出。我嘗試修改EAN :: read(...)中的「區域」;並保持價值。但只有當它在這個成員函數中被修改時。 – Woody008

+0

我建議創建一個更小的問題示例,現在您可以評論出很多邏輯並仍然會得到相同的錯誤。 – Salgar

0

嘿傢伙感謝我的幫助,如果你仔細看看傢伙,我在成員函數內部調用構造函數,但我爲了返回構造函數指定的內容。

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

感謝您的幫助球員。

相關問題