我已經在g ++(版本4.6.3)中嘗試了以下代碼的許多版本。C++ - 讀取二進制文件錯誤或編譯器錯誤?
int main(int argc,char *argv[])
{
std::string fname(argv[1]);
std::cout<<"fname is"<<fname<<std::endl;
// std::fstream f(fname.c_str(),
std::fstream::in|std::fstream::out|std::fstream::binary);
std::fstream f(fname.c_str(),std::ios::in|std::ios::out|std::ios::binary);
unsigned char b[512];
memset(b,0xff,512);
std::cout<<f.tellg()<<std::endl;
f.seekg(0,std::ios::beg);
std::cout<<f.tellg()<<std::endl;
f.read((char *)b,512);
for(int ii=0;ii<sizeof(sector0);ii++)
std::cout<<std::hex<<(int)(b[ii]) <<" ";
std::cout<<std::endl;
}
在每種情況下,結果是我通過在源代碼(樣品ASCII)的文件名是相同的,所以tellg報告一個1和緩衝文件相匹配。如果我傳入可執行文件的文件名(我的示例二進制文件),tellg報告-1,轉儲全部是ff。
我做錯了什麼或者這是一個編譯器錯誤?
提示:這不是一個編譯器錯誤。 – 2012-04-07 04:44:39
在'std :: ios :: out'模式中是否需要打開? – keety 2012-04-07 04:50:33
keety。不是這部分,而是程序的後面部分。當然,我拿出一個樣本。 – 2012-04-07 04:53:15