0
我有超過80個關卡,並且只有一個失敗了sha1 sha1哈希。原因是salt被添加到關卡文件中而不是結束。C++ std :: string附加覆蓋而不是追加
該問題只發生在Ubuntu 16.04 64位,在Windows中工作。它發生在每次發射並且每次都被插入到相同的位置。
級別文件是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":[]}
級別文件是在這個底部:https://hastebin.com/ayeduwucid.php
硬編碼的文件轉換成字符串流工作正常不過。
std::stringstream inf;
inf << R"json(..)json";
無法重現該問題。你正在使用哪種編譯器 – Sniper
這幾乎是一個很好的MCVE,但你也需要抽象輸入。讓它成爲這個問題,這將有助於未來的其他訪問者。 –
g ++(Ubuntu 6.2.0-3ubuntu11〜16.04)6.2.0 20160901 我無法更改輸入,因爲所有其他級別都能很好地工作,正如我所說的。只有這個有問題,但不是在Windows上。 – naezith