C++ C++;流冲洗有时会丢失尾随的空值
在Windows7和VC++2010 professional上使用flush with of Stream时,我得到了令人费解的文件输出 本质上,我想序列化一些值,并在调试时检查它们。为什么文件在写入INT_MAX之前包含不正确的序列化值?请注意,无符号int值似乎被截断(仅前两个字节),然后在写入int_MAX值后,丢失的字节会重新出现。很奇怪。我在断点期间在单独的十六进制编辑器中检查文件 在调试或发布模式下,这似乎是一个问题,并且似乎只影响以一对00(NULL)结尾的值C++ C++;流冲洗有时会丢失尾随的空值,c++,flush,C++,Flush,在Windows7和VC++2010 professional上使用flush with of Stream时,我得到了令人费解的文件输出 本质上,我想序列化一些值,并在调试时检查它们。为什么文件在写入INT_MAX之前包含不正确的序列化值?请注意,无符号int值似乎被截断(仅前两个字节),然后在写入int_MAX值后,丢失的字节会重新出现。很奇怪。我在断点期间在单独的十六进制编辑器中检查文件 在调试或发布模式下,这似乎是一个问题,并且似乎只影响以一对00(NULL)结尾的值 我曾尝试写入网络磁
我曾尝试写入网络磁盘,在文件句柄上调用_commit和fflush,并尝试链接commode.obj(尽管我根本不确定链接是否确实发生)。这些东西都没用。现在我能做的最好的事情就是在序列化开始时写出INT_MAX来“初始化”这个东西,因为随后的值会被正确写入。相关:我很好奇为什么您不使用实际的
uint32\u t
,并避免使用unsigned int
长32位的骰子。谢谢您的建议。你可能是对的,应该使用uint32\u t。我认为程序在刷新后返回并在文件中插入值是很狡猾的。
ofstream myStream("testfile.txt", ios::out | ios::binary);
unsigned int val = 3;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint, check file HEX: 03 00
// ^^ ^^ missing values
val = 4;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint check file HEX: 03 00 04 00
// ^^ ^^ missing values
val = INT_MAX;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint check file HEX: 03 00 00 00 04 00 00 00 FF FF FF 7F
// ^^ ^^ ^^ ^^ reappeared values