当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C++c_str不返回整个字符串》经验,为你挑选了1个好方法。

我已经尝试了以下代码与正常的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(file)), 
        std::istreambuf_iterator());

        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).

我一直在尝试使用此代码的变体很长一段时间没有成功.有任何想法吗?



1> catfood..:

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

如果你真的需要一个类似C语言的接口,那么主要的是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*的遗留函数,则该遗留函数可能还有一个长度参数.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有