我想通过std :: string :: operator>>分配std :: string * ptr。在c ++中。
我下面有一节课。
class A{
public:
A(){
ptr = new std::string();
}
A(std::string& file){
ptr = new std::string();
std::ifstream ifs(file);
std::stringstream ss;
ss << ifs.rdbuf();
*ptr=ss.str();
ifs.close();
}
~A(){
delete ptr;
}
void output(std::ostream& stream) const{
stream << *ptr;
}
void input(std::istream& stream) const{
stream >> *ptr;
}
private:
std::string *ptr;
};
int main(void){
std::string file="./file";
std::string dfile="./dump";
std::ofstream ofs(file);
A a(file);
a.output(ofs);
std::ifstream ifs(dfile);
A b();
b.input(ifs);
return 0;
}
假设“./file”包含以下文字:
The first form (1) returns a string object with a copy of the current contents of the stream.
The second form (2) sets str as the contents of the stream, discarding any previous contents.
我确认“./dump”的内容与“./file”相同。 但是,我从b.input(“./ dump”)得到的字符串对象(b's * ptr)只是一个在空格处分隔的小字符串,只是
The
如何获取全文? 谢谢
答案 0 :(得分:1)
stream >> *ptr;
读取一个以空格分隔的单词。
要阅读整行,请使用std::getline
:
std::getline(stream, *ptr);
另请注意,动态分配字符串没有意义(实际上,在当前状态下,如果复制,您的类将泄漏内存并导致双重删除,如@aschepler在评论中所指出的那样)。该成员可以是普通std::string str;
。