2013-03-13 2 views
43

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

Строка представляет собой одно слово с переменной длиной слова. Это 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

Пожалуйста, покажите свой код. В общем, _if_ правильно используется, 'std :: string' подходит для этого. – Useless

+1

Вам нужно сохранить СОДЕРЖАНИЕ 'полезной нагрузки', а не строковый объект как таковой (который обычно содержит только длину и указатель на фактический контент) –

ответ

61

Вы в настоящее время записи двоичных данных в 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()); 
+0

Мне пришлось добавить std :: ios :: binary для этого не имеют проблем с символами новой строки – Waddles

9

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

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

удалить ios::binary из вашего в вашем потоке и используйте studentPassword.c_str() вместо (char *)&studentPassword в вашем write.write()

Смежные вопросы