0

クライアントの 1 人が問題に直面している C++ メソッドを維持しています。このメソッドは、改行で区切られた一連の識別子をファイルに書き出すことになっています。しかし、彼らのマシンでは、どういうわけか、メソッドは一連の NULL をファイルに書き込んでいます。バイナリ エディタでファイルを開くと、すべてゼロが含まれていることがわかります。

なぜこれが起こっているのか理解できません。空の文字列と最初の文字を 0 に設定した文字列を割り当ててみました。識別子を書き込むだけで、ファイルの作成に問題はありません。

メソッドは次のとおりです。

void writeIdentifiers(std::vector<std::string> IDs, std::string filename)
{   
    std::ofstream out (filename.c_str(), std::ofstream::binary);

    if (out.is_open())
    {
        for (std::vector<std::string>::iterator it = IDs.begin();
             it != IDs.end();
             it++)
        {
            out << *it << "\n";
        }
    }

    out.close();
}

私の質問: NULL 値を含むファイルを作成するメソッドを提供できる可能性のある入力はありますか?

4

1 に答える 1

1

ええ、次のコードは一連の NULL バイトを非常に明確に書き込みます。

std::vector<std::string> ids;
std::string nullstring;
nullstring.assign("\0\0\0\0\0\0\0\0\0\0", 10);
ids.push_back(nullstring);
writeIdentifiers(ids, "test.dat");

コンテナーは文字列の長さを格納するためstd::string、通常の C (ヌル終了) 文字列と同じように使用できるとは限りません。ここでは、10 個の NULL バイトを含む文字列を割り当てます。文字列の長さが 10 であるため、これらが出力されます。

于 2012-08-08T22:01:27.457 に答える