【发布时间】:2014-08-28 07:01:27
【问题描述】:
这可能是微不足道的,但我是 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。
如何将buffer(char *)的全部内容复制/转换为contents(std::string)。
【问题讨论】:
-
您是否从here 获得示例?请注意,在这种情况下,您的长度太短而无法容纳以零结尾的字符串,其次您在将字符串分配给
std::string之前不要以零结尾。 -
文件使用什么编码?
-
@MicroVirus 我从这里得到了例子:cplusplus.com/reference/istream/istream/read
-
那么我的话成立。 David Schwartz 的回答绕过了这个问题。
-
char * buffer = new char [length];替换为:std::vector<char> buffer(length);
标签: c++