如何从char *中分配std :: string

时间:2014-07-07 17:47:05

标签: c++

这可能是微不足道的,但我是C++的新手并且在这里感到困惑。

我有方法:

bool load_database_file( const std::string& filename, std::string& contents ) {

    std::ifstream is (filename, std::ifstream::binary);
    if (is) {
        // get length of file:
        is.seekg (0, is.end);
        int length = (int)is.tellg();
        is.seekg (0, is.beg);

        char * buffer = new char [length];

        std::cout << "Reading " << length << " characters... ";
        // read data as a block:
        is.read (buffer, length);

        if (is)
            std::cout << "all characters read successfully.";
        else
            std::cout << "error: only " << is.gcount() << " could be read";
        is.close();

        // ...buffer contains the entire file...

        std::string str(buffer);
        contents = str;

        delete[] buffer;
    }

    return true ;  
}

我想读取一个文件并将其内容分配给contents,以便调用函数可以读取它。

我的问题是,在运行此功能后,我发现只有buffer的第一个字符被复制到contents

如何将bufferchar *)的全部内容复制/转换为contentsstd::string)。

1 个答案:

答案 0 :(得分:2)

    std::string str(buffer);

应该是:

    std::string str(buffer, buffer+length);

否则,构造函数如何知道要分配/复制多少字节?

顺便说一下,你的代码是不必要的笨拙。为什么不直接读入字符串的缓冲区而不是使用一个单独的缓冲区来分配另一个缓冲区之前必须分配和释放数据?