C++ std::string 追加覆盖而不是追加

标签 c++ linux string file append

我的游戏有超过 80 个关卡,只有一个关卡未通过​​加盐 sha1 哈希。原因是盐被添加到关卡文件中而不是末尾。

该问题仅在 Ubuntu 16.04 64 位中出现,在 Windows 中有效。它发生在每次发射并且每次都被插入到相同的位置。

关卡文件有两行,第一行是关卡文件,第二行是哈希值。所以我得到第一行并向其添加盐。但问题仍然与单行文件相同。

这是最小化的代码:

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";

最佳答案

该文件是用 Windows 编写的,它转到第二行 \n。当我以十六进制检查它时,它实际上放置了导致这些问题的 \r\n

关于C++ std::string 追加覆盖而不是追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559760/

相关文章:

c++ - 使用For循环生成随机视觉噪声

C Linux 从内存中读取/写入字(段、偏移量)

c# - LINQ 列表到句子格式(插入逗号和 "and")

python - 拆分字符串 - Python

string - 如何在 React Native 中压缩字符串?

c++ - 根据返回值重载一个C++函数

c++ - 数字识别,神经网络无法正常工作

c++ - 在 C++/STL 中是否有与 Python range() 的紧凑等价物

linux - 如何在awk中附加一个特殊字符?

linux - slurm SBATCH - 多个节点,相同的 SLURMD_NODENAME