1. ホーム
  2. c++

[解決済み] std::stringをファイルに書き出すには?

2022-03-08 13:57:41

質問

を書きたいのですが std::string 変数をファイルに保存します。私は write() メソッドを使用すると、ファイルに書き込まれます。しかし、ファイルを開くと、文字列の代わりにボックスが表示されます。

文字列は可変長の1単語のみです。は 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();`
}

解決方法は?

現在、バイナリーデータを string -オブジェクトをファイルに保存します。このバイナリデータは、おそらく実際のデータへのポインタと、文字列の長さを表す整数から構成されるだけでしょう。

テキストファイルに書き込む場合は、おそらく ofstream は、quot;out-file-stream"です。これは、以下のように正確に動作します。 std::cout しかし、出力はファイルに書き込まれます。

次の例は、stdinから1つの文字列を読み込み、その文字列をファイルに書き込むものです。 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++-reference を参照してください。 http://cplusplus.com/reference/fstream/ofstream/ofstream/

さて、バイナリ形式でファイルに書き込む必要がある場合、文字列の中の実際のデータを使って行う必要があります。このデータを取得する最も簡単な方法は string::c_str() . ということで、使えますね。

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );