在文件中写入时,文件不显示字符串的最后一个字符

时间:2014-04-09 05:39:04

标签: c++ string file-io char

此代码段是大型程序的一部分。我面临的问题是,当我使用“write”成员函数将字符串写入文件时,它不会显示字符串的最后一个字符:

#include <iostream>
#include <cstring>
#include <string>
#include <cctype>
#include <fstream>
#include <cstring>

using namespace std;

int main()
{

    fstream file1("/users/xxxxxxx/desktop/file1.txt", ios::out);
    string data;
    cout << "Enter string: " << endl;
    getline(cin, data);
    file1.write(reinterpret_cast<char*>(&data), data.size());
    //file1 << data;
    file1.close();
    return 0;
}

例如:如果输入字符串:“Hello World”。 在文件中它将显示:“Hello Worl”, 但是如果我使用“file1&lt;&lt; data”输入字符串,它确实可以正常工作。请帮帮我

2 个答案:

答案 0 :(得分:2)

file1.write(reinterpret_cast<char*>(&data), data.size());

不要这样做,您正在将string对象本身写入文件。如果你真的想使用write,你必须得到一个指向字符串所包含的第一个字符的指针,如下所示:

file1.write(data.data(), data.size());

只需使用<<运算符。

答案 1 :(得分:0)

为什么要将字符串的地址转换为char *?这不是一次有意义的转换 - 您将std::basic_string<char>*投射到char*。我怀疑你想将字符串视为char *,因为write接受const char*作为参数。您可以通过data

访问data.c_str()中存储的字符序列