在具有混合字符的数据文件中读取什么是有效,正确的方法?例如,我有一个数据文件,其中包含从其他文件,32位整数,字符和字符串加载的数据的混合。目前,我正在使用一个fstream对象,但是一旦它到达int32或字符串的结尾就会被停止。如果我将随机数据添加到数据文件中字符串的末尾,它似乎会跟随文件的其余部分。这让我相信添加到字符串上的空终止会搞砸它。以下是在文件中加载的示例:
void main()
{
fstream fin("C://mark.dat", ios::in|ios::binary|ios::ate);
char *mymemory = 0;
int size;
size = 0;
if (fin.is_open())
{
size = static_cast<int>(fin.tellg());
mymemory = new char[static_cast<int>(size+1)];
memset(mymemory, 0, static_cast<int>(size + 1));
fin.seekg(0, ios::beg);
fin.read(mymemory, size);
fin.close();
printf(mymemory);
std::string hithere;
hithere = cin.get();
}
}
为什么读取整数或字符串后此代码会停止?怎么可能绕过这个?处理这些类型的文件时这是错误的方法吗?我应该使用fstream吗?
答案 0 :(得分:3)
你有没有考虑过文件读取是否正常工作,而printf(mymemory)是否在第一个空值处停止?
查看调试器并查看我是否正确。
另外,如果你想打印别人的缓冲区,请使用puts(mymemory)或printf(“%s”,mymemory)。不要接受别人对格式字符串的输入,它可能会导致程序崩溃。
尝试
for (int i = 0; i < size ; ++i)
{
// 0 - pad with 0s
// 2 - to two zeros max
// X - a Hex value with capital A-F (0A, 1B, etc)
printf("%02X ", (int)mymemory[i]);
if (i % 32 == 0)
printf("\n"); //New line every 32 bytes
}
作为以十六进制形式转储数据文件的方法。