如何解决c_str不返回任何内容,但字符串不为空
所以,我有一堂课
class MySuperClass {
public:
std::string buffer;
};
并且想要将buffer
打印到std::cout
。
以下是有关从文件填充字符串的一些代码:
MySuperClass msc;
std::fstream file("./favicon.ico",std::fstream::in | std::fstream::binary);
if (file.is_open()) {
std::stringstream ss;
while (!file.eof())
ss << static_cast<uint8_t>(file.get());
msc.buffer.assign(ss.str());
file.close();
}
当我输出字符串时,一切正常。它打印混乱,但是有些东西。但是,当我在c_str()
上调用buffer
并尝试打印时,它什么也不打印。
解决方法
一个ICO文件starts with 2 zero bytes,因此buffer.c_str()
指向一个空字符串。结果,打印什么也没显示。如果打印字节值,您将立即了解原因
for (const auto c: buffer)
std::cout << std::setfill('0') << std::setw(2) << std::hex << +c << ' ';
OTOH std::string
can contain embedded nulls,将其打印将整个文件输出到输出流
但是为什么首先要打印一个二进制文件作为文本?如果您使用的是ANSI终端(例如Linux),则可能会使所有内容混乱,因为字节流中可能包含控制字符,并且在重置终端之前,您将再也看不到正常文本
此外,您应该大块读取数据,这比逐个字符操作要快得多
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。