2017-04-22 117 views
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"; 
+0

無法重現該問題。你正在使用哪種編譯器 – Sniper

+0

這幾乎是一個很好的MCVE,但你也需要抽象輸入。讓它成爲這個問題,這將有助於未來的其他訪問者。 –

+0

g ++(Ubuntu 6.2.0-3ubuntu11〜16.04)6.2.0 20160901 我無法更改輸入,因爲所有其他級別都能很好地工作,正如我所說的。只有這個有問題,但不是在Windows上。 – naezith

回答

0

該文件是在Windows中編寫的,它轉到第二行\n。當我用十六進制檢查它時,它實際上會導致\r\n導致這些問題。