我有一些使用ReadStr和WriteStr的代码,我认为是将字符串写入二进制文件。
文档中对WriteStr的解释说明它会以AnsiString的形式将原始数据写入对象的流,这是有道理的。但是随后ReadStr说它读了一个字符。他们不是彼此相反吗?
我想说,
pName: String[80];
我在它上面使用WriteStr,它实际写了什么?由于WriteStr需要AnsiString,它是否会将pName转换为这样?在这种情况下,是不是将“长度”字段写入流中,因为AnsiString指针指向第一个元素而不是长度字段?我现在也在寻找,这些天似乎是String == AnsiString,但我对长度字段的问题仍然保持不变。
如果让我们说它没有将长度字段写入文件,它是否仍然在数据末尾写入NULL?因此,我可以通过查找'\ 0'找到字符串结束的位置吗? ReadStr是否读取直到NULL字符?
谢天谢地:)
答案 0 :(得分:3)
在您的Unicode前版本的Delphi中,WriteStr
和ReadStr
会写入并读取AnsiString
值。编写代码写入长度,然后写入字符串内容。读取代码读取长度,分配字符串,然后用内容填充它。
当您将ReadStr
的结果分配给80个字符的短字符串时,这可能会导致截断。