Как написать 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 ответа:
в настоящее время вы записываете двоичные данные в
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() );