gpt4 book ai didi

c++ - 在 C++ 中读取和解析数据文件的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 03:12:07 24 4
gpt4 key购买 nike

读取包含混合字符的数据文件的有效、正确的方法是什么?例如,我有一个数据文件,其中混合了从其他文件加载的数据、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 吗?

最佳答案

您是否考虑过文件读取工作正常并且 printf(mymemory) 在第一个 null 处停止?

看看调试器,看看我是否正确。

另外,如果你想打印别人的缓冲区,使用 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
}

作为一种将数据文件转储为十六进制的方法。

关于c++ - 在 C++ 中读取和解析数据文件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1523186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com