Quiero escribir una std::string
variable que estoy aceptando del usuario en un archivo. Intenté usar el write()
método y escribe en el archivo. Pero cuando abro el archivo, veo cuadros en lugar de la cadena.
La cadena es solo una palabra única de longitud variable. Es std::string
adecuado para esto o debería usar una matriz de caracteres o algo así.
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á bien para esto.Respuestas:
Actualmente está escribiendo los datos binarios en el objeto
string
-a su archivo. Estos datos binarios probablemente solo consistirán en un puntero a los datos reales y un número entero que representa la longitud de la cadena.Si desea escribir en un archivo de texto, la mejor manera de hacerlo probablemente sería con
ofstream
un "flujo de salida de archivo". Se comporta exactamente igualstd::cout
, pero la salida se escribe en un archivo.El siguiente ejemplo lee una cadena de stdin y luego escribe esta cadena en el archivo
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; }
Tenga en cuenta que
out.close()
no es estrictamente necesario aquí: el deconstructor deofstream
puede manejar esto por nosotros tan pronto comoout
salga del alcance.Para obtener más información, consulte la referencia de C ++: http://cplusplus.com/reference/fstream/ofstream/ofstream/
Ahora, si necesita escribir en un archivo en forma binaria, debe hacerlo utilizando los datos reales en la cadena. La forma más sencilla de adquirir estos datos sería mediante
string::c_str()
. Entonces podrías usar:write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );
fuente
Suponiendo que está utilizando un
std::ofstream
archivo para escribir en el archivo, el siguiente fragmento escribirá unstd::string
archivo en un formato legible por humanos:std::ofstream file("filename"); std::string my_string = "Hello text in file\n"; file << my_string;
fuente
elimine el
ios::binary
de sus modos en su ofstream y úselo enstudentPassword.c_str()
lugar de(char *)&studentPassword
en suwrite.write()
fuente