Ken*_*2pd 6 c++ string malloc file
我在将字符串写入二进制文件时遇到问题.这是我的代码:
ofstream outfile("myfile.txt", ofstream::binary);
std::string text = "Text";
outfile.write((char*) &text, sizeof (string));
outfile.close();
Run Code Online (Sandbox Code Playgroud)
然后,我尝试阅读它,
char* buffer = (char*) malloc(sizeof(string));
ifstream infile("myfile.txt", ifstream::binary);
infile.read(buffer, sizeof (prueba));
std::string* elem = (string*) buffer;
cout << *elem;
infile.close();
Run Code Online (Sandbox Code Playgroud)
我不能让它工作.对不起,我只是绝望了.谢谢!
小智 10
要将 std::string 写入二进制文件,您需要先保存字符串长度:
std::string str("whatever");
size_t size=str.size();
outfile.write(&size,sizeof(size));
outfile.write(&str[0],size);
Run Code Online (Sandbox Code Playgroud)
要读取它,请反转该过程,首先调整字符串的大小,以便您有足够的空间:
std::string str;
size_t size;
infile.read(&size, sizeof(size));
str.resize(size);
infile.read(&str[0], size);
Run Code Online (Sandbox Code Playgroud)
因为字符串的大小是可变的,除非您将该大小放入文件中,否则您将无法正确检索它。您可以依赖 '\0' 标记,该标记保证位于 c 字符串的末尾或等效的 string::c_str() 调用,但这不是一个好主意,因为
这条线
outfile.write((char*) &text, sizeof (string));
Run Code Online (Sandbox Code Playgroud)
是不正确的
sizeof(string) 不返回字符串的长度,它返回字符串类型的sizeof(以字节为单位).
也不要将文本转换为char*使用C转换,您可以通过使用适当的成员函数来获取char*text.c_str()
你可以简单地写
outfile << text;
Run Code Online (Sandbox Code Playgroud)
代替.