Как написать std:: string в файл?


Я хочу написать std::string переменная, которую я принимаю от пользователя в файл. Я пробовал использовать write() метод и он записывает в файл. Но когда я открываю файл, я вижу коробки вместо строки.

строка-это только одно слово переменной длины. Это std::string подходит для этого, или я должен использовать массив символов, или что-то.

ofstream write;
std::string studentName, roll, studentPassword, filename;


public:

void studentRegister()
{
    cout<<"Enter roll number"<<endl;
    cin>>roll;
    cout<<"Enter your name"<<endl;
    cin>>studentName;
    cout<<"Enter password"<<endl;
    cin>>studentPassword;


    filename = roll + ".txt";
    write.open(filename.c_str(), ios::out | ios::binary);

    write.put(ch);
    write.seekp(3, ios::beg);

    write.write((char *)&studentPassword, sizeof(std::string));
    write.close();`
}
3 53
c++

3 ответа:

в настоящее время вы записываете двоичные данные в string-объект в файл. Эти двоичные данные, вероятно, будут состоять только из указателя на фактические данные и целого числа, представляющего длину строки.

если вы хотите писать в текстовый файл, лучший способ сделать это, вероятно, быть с ofstream, "out-file-stream". Он ведет себя точно так же, как std::cout, но вывод записывается в файл.

в следующем примере читается одна строка из stdin, а потом записывает эту строку в файл output.txt.

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

int main()
{
    std::string input;
    std::cin >> input;
    std::ofstream out("output.txt");
    out << input;
    out.close();
    return 0;
}

отметим, что out.close() здесь нет строгой необходимости: деконструктор ofstream можете справиться с этим для нас, как только out выходит за рамки.

дополнительную информацию см. В справочнике по C++:http://cplusplus.com/reference/fstream/ofstream/ofstream/

теперь, если нужно писать в файл в двоичном виде, вы должны сделать это, используя фактические данные в строку. Этот самый простой способ получить эти данные будет использовать string::c_str(). Так что вы могли бы использовать:

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );

предполагая, что вы используете std::ofstream писать в файл, следующий фрагмент будет писать std::string для файла в удобочитаемой форме:

std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;

удалить ios::binary из ваших режимов в вашем ofstream и использовать studentPassword.c_str() вместо (char *)&studentPassword в своем write.write()