文件的C++字符串

C++ strings to/from file

本文关键字:字符串 C++ 文件      更新时间:2023-10-16

一个简单的问题:为什么以下代码不起作用?我希望保存并读取一个字符串,但这并没有发生。。。

#include <iostream>
#include <fstream>
using namespace std;
static string path = "/Users/john/Desktop/file";

main() {
string a;
a = "onen";
fstream outStream(path.c_str(), ios::out | ios::binary);
outStream.write((char *) &a, sizeof(a));
outStream.close();
a = "twon";
fstream inStream(path.c_str(), ios::in | ios::binary);
inStream.read((char *) &a, sizeof(a));
inStream.close();
cout << a;
return 0;}

非常感谢!

不能将字符串写成指针。使用普通流运算符(<<)或使用

outStream.write(a.c_str(), a.size());

write中也使用.c_str().size()

outStream.write(a.c_str(),a.size()); 

.length()也在那里,它返回和.size()相同的值。

但你为什么不简单地这样做呢:

outStream << a;

并将其读作:

inStream >> a;
(char *) &a

不是存储在std::string中的字符串,您只是告诉编译器将该任意地址(存储std::string path对象的位置)视为字符。

sizeof(a)

不会以字节为单位给出字符串的长度:sizeof给出对象的大小,但std:string对象是字符的内务信息,而不是文本本身。

使用

outStream.write(a.c_str(), a.size());

或者更好的

outStream << a;

您已经声明了一个string,但您正试图将它当作一个字符数组来读取和写入。CCD_ 12未被实现为字符数组。

使用

outStream << a.c_str();

而不是

outStream.write((char *) &a, sizeof(a));

更改

outStream.write((char *) &a, sizeof(a));

outStream.write(a.c_str(), s.size());