【发布时间】:2021-05-07 14:25:20
【问题描述】:
首先,我想指出,尽管使用了 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() 和清理时使用 new/malloc 分配一个新缓冲区(删除/免费)稍后。现在to_return的内容在函数末尾被释放,所以指向它是未定义的行为。 -
@MikeCAT 可能不是(尽管它显示在控制台中)。如何修复那个 m88 相同:如何修复它。
-
@PiotrWasilewicz 我在评论的前半部分确实给了你 2 种方法来解决这个问题。
-
请注意,如果其字节在可打印字符范围内,提前打印的大小可能会导致一些额外的字符可见。
标签: c++ arrays string file-writing