2012-02-26 60 views
0

喜一有一個功能,通過線從一個文本文件讀入行的每一行我做一些關於它的操作替換爲string..etc矢量數據檢查

然後我的push_back該行到載體

這是我在Parser.h類從功能RuleParser

std::ifstream ifs(TextFileName); 
while (!ifs.eof()) 
{ 
. 
.modification code 
. 
patterns.push_back((buildString).c_str()); //buildString is the modified line 
cout << buildString << endl; 
} 

但瓦特

class Parser 
{// start class 
public: 
vector<const char*> patterns; 

Parser(); 
~Parser(); 
void RuleParser(const char *TextFileName); // this is the function that takes the file name 

private: 
};// end class 

段如果我試圖檢查矢量中的數據是否正確,它會輸出完全不同的數據。 我甚至在push_back之後放了一個cout來檢查它的整體性,但是我發現buildString是正確的......那就是每次推送的數據......我做錯了什麼。

這裏是我用來查看我的數據是否正確的循環。

for (int i = 0;i < patterns.size() ;i++) 
{ 
cout << patterns.at(i) << endl; 
} 

回答

0

井網是指針的集合,所以你最終會在每個循環迭代push_back'ing的指針一樣buildString,而不是push_back'ing字符串內容。 buildString在循環的下一個迭代變化然後當,指針變爲無效,但它仍然是在模式 - 不好

我建議你聲明的模式是:當你做

vector<std::string> patterns; 

這樣:

patterns.push_back(buildString.c_str()) 

該字符串的內容將被複制而不是指針,並保持有效通過。

+0

我一直在複製它錯誤這裏是正確的方式 – user1231229 2012-02-26 08:36:39

+0

patterns.push_back(strdup(buf.c_str())); – user1231229 2012-02-26 08:37:45