繁体   English   中英

到/来自文件的C ++字符串

[英]C++ strings to/from file

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

#include <iostream>
#include <fstream>
using namespace std;

static string path = "/Users/john/Desktop/file";


main() {
string a;

a = "one\n";

fstream outStream(path.c_str(), ios::out | ios::binary);
outStream.write((char *) &a, sizeof(a));
outStream.close();

a = "two\n";

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());

使用.c_str().size()write以及:

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

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

但是,为什么不简单地这样做呢?

outStream << a;

并读为:

inStream >> a;
(char *) &a

不是存储在std::string内的std::string ,您只是在告诉编译器将该任意地址(存储std::string path对象的地址)当作字符对待。

sizeof(a)

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

采用

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

或更好,

outStream << a;

您已经声明了一个string ,但是您试图像读写一个字符数组一样对其进行读写。 std::string未实现为字符数组。

采用

outStream << a.c_str();

代替

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

更改

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM