gpt4 book ai didi

c++ - 二进制文件输入、输出和 append C++

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:19 24 4
gpt4 key购买 nike

我在 C++ 中尝试基本的输入、输出(和追加),这是我的代码

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;



void escribir(const char *);
void leer(const char *);

int main ()
{
escribir("example.bin");
leer("example.bin");
system("pause");
return 0;
}

void escribir(const char *archivo)
{
ofstream file (archivo,ios::app|ios::binary|ios::ate);
if (file.is_open())
{
file<<"hello";
cout<<"ok"<<endl;
}
else
{
cout<<"no ok"<<endl;
}
file.close();


}

void leer(const char *archivo)
{
ifstream::pos_type size;
char * memblock;

ifstream file (archivo,ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();

cout<< memblock<<endl;

delete[] memblock;
}
else
{
cout << "no ok"<<endl;
}
}

它第一次运行良好,但是当我第二次运行它时,它会向文件中添加“hello”和一些扩展字符。

你能帮我找出问题所在吗?

提前致谢

最佳答案

问题似乎不在于写入文件,而在于读取和显示,即这里:

memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout<< memblock<<endl;

用 cout 显示期望字符串以 null 终止。但是您只为文件内容分配了足够的空间,而不是终止符。添加以下内容应该可以正常工作:

memblock = new char [size+1]; // add one more byte for the terminator
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
memblock[size] = 0; // assign the null terminator
cout<< memblock<<endl;

关于c++ - 二进制文件输入、输出和 append C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222385/

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