小编R. *_*sil的帖子

将字符串作为二进制写入/读取到随机访问的文件中

简单的问题:我想将固定长度的字符串写入二进制文件(即二进制文件),如下面的代码片段所示。

写作“看起来”很好,但从文件中读取不起作用(编译和运行没有崩溃,但没有给出预期的结果)。

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    {
        std::ofstream out {"out.dat", std::ios::binary};

        //all of length 5
        std::string a[] {{"12345"}, {"6789A"}, {"BCDEF"}};

        //write down strings without \0
        out.write(a[0].c_str(), a[0].length());
        out.write(a[1].c_str(), a[1].length());
        out.write(a[2].c_str(), a[2].length());
    }

    {
        std::ifstream in {"out.dat", std::ios::binary};

        std::string s2 {5, '\0'}; //I can store at least 5 chars
        in.seekg(0 + 2 * 5); //try to read string of index 2
        in.read(&s2[0], 5);

        std::cout << s2 << std::endl; //prints "BC", not "BCDEF"  
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一行应该恢复字符串“BCDEF”,但只打印“BC”(g++ 10.2.0)。 …

c++ fstream stdout

2
推荐指数
1
解决办法
48
查看次数

转发成员函数参数

事情很简单,我想转发成员函数的调用及其参数,如以下代码段所述。

请注意,这不是这个问题的重复,也不是这个

#include <iostream>
#include <functional>

template<class Function, class ... Args>
auto forward_args(Function&& f, Args&& ... args)
{
    return f(std::forward<Args>(args)...);
}

int f(int i) { return i; }

struct A {
  int get(int i) const { return i; }  
};

int main()
{
    std::cout << forward_args(f, 2) << std::endl; //ok
    
    A a;
    //std::cout << forward_args(&A::get, a, 2) << std::endl; //ko
        
    static auto wrong_wrapper = &A::get;
    //std::cout << forward_args(wrong_wrapper, a, 2) << std::endl; //ko again
        
    static std::function<int …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates perfect-forwarding

1
推荐指数
1
解决办法
80
查看次数