Quiero escribir una std::stringvariable 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::stringadecuado 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::stringestá 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
ofstreamun "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 deofstreampuede manejar esto por nosotros tan pronto comooutsalga 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::ofstreamarchivo para escribir en el archivo, el siguiente fragmento escribirá unstd::stringarchivo 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::binaryde sus modos en su ofstream y úselo enstudentPassword.c_str()lugar de(char *)&studentPassworden suwrite.write()fuente