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

c_str不返回任何内容,但字符串不为空

如何解决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 举报,一经查实,本站将立刻删除。