使用ifstream读取和写入二进制字符串的正确格式

时间:2011-02-01 00:02:06

标签: iphone c++ vb.net objective-c++

我正在尝试读回一个我写入二进制文件的字符串,但它给了我一些问题,我不知道发生了什么。我使用以下代码打开并阅读我的文件:

ifstream input([filePath UTF8String], ios::in | ios::binary);
int numStringBytes;
input.read((char*)&numStringBytes, 4);
char *names;
input.read((char*)names, numStringBytes);
input.close();

文件读取代码还有很多,但它是专有的,这是不断崩溃的部分。它运行良好加载前两个文件,但是当我尝试打开第三个文件时,它在输入.read((char *)name,numStringBytes)上与EXC_BAD_ACCESS崩溃;线。我认为没有任何理由会崩溃。任何人的想法?我正在使用以下代码在VB.NET中编写二进制文件:

Dim myFS As New FileStream(savePath, FileMode.Create)
Dim encoding As New System.Text.UTF8Encoding()
Dim stringBytes() As Byte = encoding.GetBytes("++string")

Dim stringByteSize(0) As Integer
stringByteSize(0) = stringBytes.Count

Dim stringCountBytes(3) As Byte
Buffer.BlockCopy(stringByteSize, 0, stringCountBytes, 0, stringCountBytes.Count)
myFS.Write(stringCountBytes, 0, stringCountBytes.Length)

myFS.Write(stringBytes, 0, stringBytes.Length)
myFS.Close()

1 个答案:

答案 0 :(得分:2)

需要分配

names。 你可以使用类似的东西:

char *names = new char[ numStringBytes ];
input.read((char*)names, numStringBytes);
...
delete[] names; // don't forget to dealocate

或者,更好的是,使用std::vector

std::vector<char> names( numStringBytes, 0 ); // construct a big enough vector
input.read((char*)&names[ 0 ], numStringBytes);