2010-04-24 37 views
1

我想用C++編寫一個程序來讀取一個文件,其中每個字段之前都會有一個數字,表示它有多長。如何在C++程序中使用長度指示器

問題是我讀了一個類的對象中的每個記錄;我如何使這個類的屬性動態化?

例如,如果字段是「john」,它將以4個字符的數組讀取它。

我不想製作1000個元素的數組,因爲最小內存使用量非常重要。

回答

1

爲了做到這一點,您需要使用動態分配(直接或間接)。

如果直接,需要new[]delete[]

char *buffer = new char[length + 1]; // +1 if you want a terminating NUL byte 

// and later 
delete[] buffer; 

如果你被允許使用升壓,可以簡化一點用boost::shared_array<>。隨着shared_array,您不必手動刪除存儲器陣列封裝會照顧的,對你:

boost::shared_array<char> buffer(new char[length + 1]); 

最後,你可以通過像std::stringstd::vector<char>類間接做動態分配。

3

使用std::string,這將調整大到足以容納您分配給它的內容。

2

如果你只是想從文件中讀取的一字一句,你可以這樣做:

vector<string> words; 
ifstream fin("words.txt"); 
string s; 
while(fin >> s) { 
    words.push_back(s); 
} 

這將會把文件中的所有單詞到載體words,雖然你將失去的空白。

1

我想在記錄之間沒有空格,或者你只需​​要在一個循環中寫入file >> record

size_t cnt; 
while (in >> cnt) { // parse number, needs not be followed by whitespace 
    string data(cnt, 0); // perform just one malloc 
    in.get(data[0], cnt); // typically perform just one memcpy 
    // do something with data 
} 
相關問題