我正在寫一個小程序,它以二進制文件的形式從16個字節的組中讀取字節(請不要問爲什麼),修改它們,然後將它們寫入另一個文件。爲什麼std :: fstream使用char *?
的fstream::read
函數讀取到char *
緩衝,這是我最初傳遞到看起來像這樣的功能:
char* modify (char block[16], std::string key)
修改是在block
中,然後返回來完成。在漫遊SO的帖子時,我意識到使用std::vector<char>
可能是一個更好的主意。我的下一個擔心是如何將char *
轉換爲std::vector<char>
。再次,SO gave me an answer。
但現在我想知道的是:如果它這樣一個好主意,使用std::vector<char>
代替char*
,爲什麼fstream
函數使用char*
呢?
此外,將char*
從fstream
轉換爲std::vector<char>
首先是否是個好主意?
編輯:我現在認識到,因爲fstream::read
是用來直接寫入對象的數據,所以需要char *
。我現在必須修改我的問題。首先,爲什麼fstream::read
沒有重載功能?其次,在我寫過的程序中,哪一個更好?
不是真的知道這是有益的,但你可以讀入'的std :: VECTOR'直接使用類似'.read(VECT東西[0] ,16)'(或'.read(vect.data(),16)',如果你使用的是C++ 11),以避免使用'char *'中間人。只要確保使用'.resize'爲數據分配足夠的空間。 – Xymostech 2013-03-12 05:32:34
我想說,不是所有的緩衝區都是'std :: vector'(有時你是一個給'char *'讀取數據的庫)。如果'std :: fstream'強制你使用'std :: vector '而不是允許多種變體(原始數組,'std :: array'等),那將會有點奇怪。另外,有時你正在讀取/反序列化數據直接進入一個類型(比如'int'),在這種情況下,std :: vector '就是......很奇怪。 –
Cornstalks
2013-03-12 05:33:03
@Xymostech:不會傳遞指針輕微地破壞了不使用指針的初始目的?或者傳遞一個指向'std :: vector'安全的指針? – 2013-03-12 05:36:27