2014-12-03 85 views
0

我這行獲得文件大小聲明大小爲STD數組:: streamoff

std::streamoff _responseLength = _responseIn.tellg(); 

我與一個wchar_t的指針分配內存,

wchar_t* _responseString = new wchar_t[_responseLength]; 

我得到一個警告約'initializing' : conversion from 'std::streamoff' to 'unsigned int', possible loss of data

我應該怎麼做才能徹底消除編譯器的警告?

回答

3

的std :: streamoff是一個大的(至少64位)簽署整數(通常long longint64_t,或long如果是64位)。用於表示對象大小的類型以及數組和容器的長度是size_t,它是無符號的,通常是unsigned long。你需要static_cast你的streamoff值爲size_t。

請注意,tellg()可能會返回-1。 static_cast ing -1到size_t會產生巨大的正值;試圖分配這麼多內存會導致程序失敗。在投射之前,您需要明確檢查-1。

請不要使用裸指針和new。如果你需要一個緩衝,使用以下命令:

std::vector<wchar_t> buffer(static_cast<size_t>(responseLength)); 
// use &buffer.front() if you need a pointer to the beginning of the buffer 
1

新的運營商來分配內存需要一個unsigned int所以std::streamoff被轉換成unsigned int以適應需求。

你得到的限制是你無法讀取大於4GB的文件。

爲避免這種限制,您需要閱讀適合內存的文件。

如果你的文件只有100MB大,就忽略警告。