数据未以二进制形式保存

时间:2015-11-10 07:51:00

标签: c++ binaryfiles data-files

我制作了如下程序

localhost:3000

但是当我用记事本打开文件bin_data时,我发现字符串是以文本格式保存而不是二进制形式......请帮助......

此代码可以保存10个字的单词。 但是当我通过turbo c ++ v4.5编译这段代码时,我发现了这一点。当我输入1或2个字母单词时,它以文本格式保存(忽略垃圾值)但是当我输入3到7个字母长的单词时,它以二进制格式保存。再以9和10字母的单词再次以文本格式.....任何人都可以告诉我原因......? 请按照我的说法编译并运行程序并回答

1 个答案:

答案 0 :(得分:2)

您的数据仅包含文字。它由文本格式和二进制格式的相同位表示。

二进制格式意味着您的数据将不变地写入文件。如果您使用文本格式,则会修改一些非文本字符。例如,字节10(表示换行符)可以更改为特定于操作系统的换行符(Windows上的两个字节,15和10)。

有关文本字符的二进制值,请参阅http://www.asciitable.com/

您的第二个示例有buffer overflow

char name[24];
fout.write((char*)&name,10);

您保留24个字节的数据,这些数据由恰好位于该内存点的随机字节填充。将2个字符的字符串保存到缓冲区时,它只会覆盖前三个字节。第三个字节设置为值0,它告诉您文本在该点结束。如果你要调用strlen(),它会告诉你前0字节前的字符数。

如果您的输入是2个字符的文本,并且您选择从缓冲区写入10个字节,则最后的7个字节将填充无效数据。请注意,这不会导致访问冲突,因为您已保留24个字节的数据。

另请参阅:https://en.wikipedia.org/wiki/Null-terminated_string