#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main() {
    string x;
    getline(cin,x);
    ofstream o("f:/demo.txt");
    o.write( (char*)&x , sizeof(x) );
}

我得到了意外的输出。我没有得到我在字符串函数中写的内容。
为什么是这样 ?
请解释 。

就像我编写steve pro时一样,我在文件中将输出作为8/ steve pro ÌÌÌÌÌÌ ÌÌÌÌ获得

我希望输出为 steve pro

最佳答案

您正在将std::string当作不是这样的东西。这是一个复杂的对象,在其内部的某个位置为您存储字符。

没有理由假定字符数组位于对象的开头(&x),并且对象的sizeof与它可以间接持有/代表多少个字符无关。

您可能正在寻找:

o.write(x.c_str(), x.length());

或仅使用内置的格式化I / O机制:
o << x;

关于c++ - 这个程序有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6533041/

10-11 18:30