gpt4 book ai didi

C++ c_str 不返回整个字符串

转载 作者:太空狗 更新时间:2023-10-29 23:23:46 24 4
gpt4 key购买 nike

我已经用普通的 ifstreams 和我正在使用的当前 boost:iostream 尝试了以下代码,两者都有相同的结果。

它旨在将文件从 physfs 加载到内存中,然后将其传递给处理程序进行处理(例如图像、音频或数据)。目前,当调用 c_str 时,它只返回文件的一小部分。

        PhysFS::FileStream file("Resources/test.png" , PhysFS::OM_READ);

if(file.is_open()) {

String* theFile;

theFile = new String((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());

String::iterator it;
for ( it=theFile->begin() ; it < theFile->end(); it++ ) {
std::cout << *it;
} // Outputs the entire file

std::cout << theFile->c_str(); // Outputs only the first few lines

}

迭代器循环按预期输出整个 png 文件,但 c_str 调用仅返回前几个字符 (\211PNG)。

我已经尝试了这段代码的变体很长一段时间但没有成功。有什么想法吗?

最佳答案

我想下一个字符是空 (ASCII 0) 字节。 c_str() 只是给你一个 *char,因此你对 stdout 的写入被解释为一个 C 类字符串,它以第一个空字节结束。

如果你真的需要一个类似 C 的接口(interface)来访问这个字符串,最主要的是 theFile->c_str() 指向你的数据,theFile.length 给你字符串中的字符数。所以你可能想做这样的事情:

char *c_value = theFile->c_str()
for (int i = 0; i < theFile.length; i++)
{
cout << c_value[i];
}

真正的解决方案取决于您首先转换为 char * 的原因。如果您正在调用仅接受 char * 的遗留函数,则该遗留函数可能还有一个长度参数。

关于C++ c_str 不返回整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1555719/

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