C++ 跨平台开发的坑集合
std::fstream引发的血案
std::fstream::open函数:
void open (const char* filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
void open (const string& filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
案发现场:
std::fstream file;
char buf[10] = {0,1,2,3,4,5,6,7,8,9};
file.open("test.dat",ios::truncate|ios::out);
file.write(buf,10);
file.close();
Linux平台文件大小是10个字节,winzhedows平台文件大小 > 10个字节
纳尼。。。什么鬼。。。
百般折腾,头发抓掉一把一把,折腾了大半天后,终于灵光一闪,是不是少了个标志,加上ios::binary
后果然神力显现,经过验证大小都一样了。
解锁正确姿势如下:
std::fstream file;
char buf[10] = {0,1,2,3,4,5,6,7,8,9};
file.open("test.dat",ios::truncate|ios::out|ios::binary);
file.write(buf,10);
file.close();