std :: ifstream.read()不会向我的缓冲区返回任何内容

时间:2018-06-14 11:20:05

标签: c++ vector

当我使用函数smoke读取文件时,此函数不会将数据保存到我的缓冲区smoke。我尝试读取文件并将其保存到std::ifstream file("favicon.ico", std::ios::binary); char ak47xd[1024]; std::string testxcs = ""; if (file.is_open()) { file.seekg(0, file.end); const size_t length = file.tellg(); file.seekg(0, file.beg); char smoke[318]; file.read(smoke, length); printf("sss: %s\n",smoke); for (int i = 0; i < length; i++) { printf("sk: %c\n",smoke[i]); testxcs += smoke[i]; //printf("%i : %X\n", i, smoke[i] & 0xFF); //testxcs += (smoke[i] & 0xFF); //printf("Smoke: %s\n",testxcs.c_str()); } } 二进制内容。

如何用矢量更好地做到这一点?

{{1}}

输出: Here picture

Here problem

1 个答案:

答案 0 :(得分:1)

reinterpret_cast char**char*,您的计划行为未定义。 可能正在发生的事情是正在其他地方写

您不需要三个缓冲区来读入

#include <iostream>
#include <string>

std::ifstream file("favicon.ico", std::ios::binary);
if (file) {
    file.ignore( std::numeric_limits<std::streamsize>::max() );
    std::streamsize length = file.gcount();
    file.clear();   // Since ignore will have set eof.
    file.seekg( 0, std::ios_base::beg );

    std::string testxcs(length, 0);

    file.read(testxcs.data(), length);

    std::cout << "sss: " << testxcs << "\n";
    for (char c : testxcs)
    {
        std::cout << "sk: " << c << "\n";
    }
}