gpt4 book ai didi

c++ - c_str()不返回任何内容,但字符串不为空

转载 作者:行者123 更新时间:2023-12-02 09:51:23 31 4
gpt4 key购买 nike

所以我有一个类

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上),则可能会使所有内容困惑,因为字节流中可能包含控制字符,并且在重置终端之前,您将再也看不到正常文本了。
此外,您应该大块读取数据,这比逐字符操作要快得多

关于c++ - c_str()不返回任何内容,但字符串不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64365821/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com