微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确地将字符数组写入文本文件

如何解决如何正确地将字符数组写入文本文件

首先,我想指出,尽管使用 C++,但我不能使用字符串或向量。就像带有对象的 C。

好的,我有一个带有 char* test() 方法的 A 类:

char* A::test()
{
    char to_return[3*this->some_value+3];
    for (int i = 0; i < this->some_value; i++)
    {
        to_return[3*i] = '♥';
        to_return[3*i+1] = 'b';
        to_return[3*i+2] = ' ';
    }
    char* dto_return = to_return;
    return std::move(dto_return);
}

我有 B 类对象的下一个

ofstream file;
file.open("myfile.txt",ofstream::out | ofstream::trunc);
file.close();
file.open("myfile.txt");
char* to_write = a_obj->test();
size_t len = strlen(to_write);
file.write((char*)&len,sizeof(len));
file.write(to_write,len);
file.close();

(基于this answer

但是文件内容是:

       ¥b ¥b ¥b m

这绝对不是我要找的。内容应该是:

♥b ♥b ♥b 

如何解决这个问题?

解决方法

问题是:

  • to_return 是一个本地数组,它在从函数返回时结束其生命周期,因此返回其指针是一个坏主意。
  • '♥' 可能与您想要的有所不同,尤其是当 不能用您的字符代码中的一个字节表示时。

要克服这个问题:

  • 分配一个从函数返回后仍然存在的动态数组。
  • 使用字符串字面量来表示要添加的字符。
char* A::test()
{
    const char *part = "♥b ";
    size_t part_len = strlen(part);
    char *to_return = new char[part_len*this->some_value+1];
    for (int i = 0; i < this->some_value; i++)
    {
        strcpy(to_return + part_len * i,part);
    }
    return to_return;
}

返回的动态数组使用完毕后应通过delete[]释放。

char* to_write = a_obj->test();

// ...

delete[] to_write;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。