Я хочу записать 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();`
}
std::string
для этого подходит.Ответы:
В настоящее время вы записываете двоичные данные в
string
-object в свой файл. Эти двоичные данные, вероятно, будут состоять только из указателя на фактические данные и целого числа, представляющего длину строки.Если вы хотите записать в текстовый файл, лучший способ сделать это, вероятно, будет с
ofstream
, "out-file-stream". Он ведет себя точно так жеstd::cout
, но вывод записывается в файл.В следующем примере одна строка считывается из стандартного ввода, а затем записывается в файл
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() );
источник
Предполагая, что вы используете a
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()
источник