Quero escrever uma std::string
variável que estou aceitando do usuário para um arquivo. Tentei usar o write()
método e ele grava no arquivo. Mas, quando abro o arquivo, vejo caixas em vez da string.
A string é apenas uma única palavra de comprimento variável. É std::string
adequado para isso ou devo usar uma matriz de caracteres ou algo assim.
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
está bom para isso.Respostas:
No momento, você está gravando os dados binários no
string
objeto -no seu arquivo. Esses dados binários provavelmente consistirão apenas em um ponteiro para os dados reais e um inteiro representando o comprimento da string.Se você deseja gravar em um arquivo de texto, a melhor maneira de fazer isso provavelmente seria com
ofstream
um "fluxo de saída do arquivo". Ele se comporta exatamente comostd::cout
, mas a saída é gravada em um arquivo.O exemplo a seguir lê uma string de stdin e, em seguida, grava essa string no arquivo
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; }
Observe que
out.close()
não é estritamente necessário aqui: o desconstrutor deofstream
pode cuidar disso para nós assim queout
sair do escopo.Para obter mais informações, consulte C ++ - referência: http://cplusplus.com/reference/fstream/ofstream/ofstream/
Agora, se você precisar gravar em um arquivo no formato binário, deverá fazer isso usando os dados reais da string. A maneira mais fácil de adquirir esses dados seria usando
string::c_str()
. Então você pode usar:write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );
fonte
Supondo que você esteja usando um
std::ofstream
para gravar no arquivo, o seguinte snippet gravará umstd::string
no arquivo em formato legível por humanos:std::ofstream file("filename"); std::string my_string = "Hello text in file\n"; file << my_string;
fonte
remova o
ios::binary
de seus modos em seu ofstream e use emstudentPassword.c_str()
vez de(char *)&studentPassword
em seuwrite.write()
fonte