私のゲームには80以上のレベルがあり、1つだけが塩辛いsha1ハッシュに失敗します。理由は、塩がレベルファイルの末尾ではなく内部に追加されているためです。C++ std :: stringは、追加の代わりに上書きを追加します。
この問題は、Windowsで動作するUbuntu 16.04 64ビットでのみ発生します。毎回の打ち上げ時に毎回同じ位置に挿入されます。
レベルファイルは2行です。最初の行はレベルファイルで、2行目はハッシュです。だから私は最初の行を取得し、それに塩を追加します。しかし、問題は単一行ファイルでも同じです。ここで
が最小限のコードです:
int main() {
std::ifstream inf("level.txt");
std::string lvl_file;
std::getline(inf, lvl_file);
inf.close();
lvl_file += "MYSECRETSALT"; // lvl_file.append(..) also has same issue
std::cout << lvl_file << std::endl;
}
このコードは、全体のレベルのファイルを印刷しますが、MYSECRETSALTはない、それの最後にそれの内部に入りました。追加する前にlvl_fileを印刷すると、何も欠落することなくきれいに印刷されます。
// IT SHOULD BE LIKE
...[0,26],[1,61]],"decor_2":[[0,25000]],"decor_3":[[0,25000]],"tiles_3":[[0,25000]]},"ghosts":[],"turrets":[]}MYSECRETSALT
// BUT IT PRINTS LIKE THIS
...[0,26],[1,61]],"decor_2":[[0,25000]],"decorMYSECRETSALT0]],"tiles_3":[[0,25000]]},"ghosts":[],"turrets":[]}
レベルファイルこれの一番下にある:にstringstreamにファイルをハードコーディングhttps://hastebin.com/ayeduwucid.php
はも正常に動作します。
Windowsで書かれ、それが\n
と二行目に行きましたファイル
std::stringstream inf;
inf << R"json(..)json";
問題を再現できません。どちらのコンパイラを使用していますか – Sniper
これはほぼMCVEですが、入力を抽象化する必要もあります。これを今後の他の訪問者に役立つ質問にしてください。 –
g ++(Ubuntu 6.2.0-3ubuntu11〜16.04)6.2.0 20160901 私が言ったように他のすべてのレベルがうまく動作するので、入力を変更できません。この問題のみが問題になりますが、Windowsでは発生しません。 – naezith