如何从 C++ 中的二进制文件中读取字符串?

问题描述

我有一个函数,两个函数,在 C++ 中写入和读取二进制文件

void save_ascII(string ascII_text,string filename)
{
    ofstream fout;

    fout.open(filename,ofstream::binary);
    
    size_t input_size = ascII_text.size();
    if (fout.is_open())
    {
        fout.write(reinterpret_cast<char*>(&input_size),sizeof(input_size));
        fout.write(reinterpret_cast<char*>(&input_size),input_size);
        fout.close();
    }
}

void read_ascII(string filename)
{
    string read_input;

    ifstream fin(filename,fstream::binary);
    
    size_t read_size;

    if (fin.is_open())
    {
        fin.read(reinterpret_cast<char*>(&read_size),sizeof(read_size));
        read_input.resize(read_size);
        fin.read(&read_input[0],read_size);
        fin.close();
    }
}

问题在于,当它从二进制文件中读取时,它只是内存中的虚拟数据。

When it reads from the binary file,it shows: 
►╠╠╠╠╠╠╠╠▄²A

任何建议都非常感谢。

解决方法

在您的代码中,

size_t input_size = ascII_text.size();
if (fout.is_open())
{
    fout.write(reinterpret_cast<char*>(&input_size),sizeof(input_size));
    fout.write(reinterpret_cast<char*>(&input_size),input_size); //<--bug
    fout.close();
}

而不是标有 bug<-- 的行,您需要

fout.write(ascII_text.data(),input_size);