我在Visual Studio C++中編寫了一個簡單的控制檯應用程序。我想讀012kb擴展到一個字節數組的二進制文件。嘗試讀取二進制文件時出現問題C++
ifstream inFile;
size_t size = 0;
char* oData = 0;
inFile.open(path, ios::in|ios::binary);
if (inFile.is_open())
{
size = inFile.tellg(); // get the length of the file
oData = new char[size+1]; // for the '\0'
inFile.read(oData, size);
oData[size] = '\0' ; // set '\0'
inFile.close();
buff.CryptoContext = (byte*)oData;
delete[] oData;
}
但是,當我啓動它,我在所有的oData
字符接收到相同的字符,每次一個又一個,例如:
oData = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...".
然後我嘗試另一種方式:
std::ifstream in(path, std::ios::in | std::ios::binary);
if (in)
{
std::string contents;
in.seekg(0, std::ios::end);
contents.resize(in.tellg());
in.seekg(0, std::ios::beg);
in.read(&contents[0], contents.size());
in.close();
}
現在內容有非常奇怪的值:一部分值是正確的,一部分是負值和奇怪值(可能與signed char
和有關?)。
有沒有人有任何想法?
謝謝!
行'in.read(&contents [0],contents.size())'*可能*未定義的行爲,*絕對*一個非常壞的主意。 – DevSolar 2013-03-20 12:04:39