确定数据是否存储在 std::string 中¶
不知道 std::string 类的结构,你就很难追踪到我刚才描述的假设性 bug。但把这里学到的与经验结合,你可以完全避免这类 bug。当你在内存中找到像 name 这样的字符串时,不要只假设它存储在简单数组中。要弄清字符串是否真是 std::string,问自己这些问题:
(cid:127)为什么以 null 结尾的字符串会带有长度?如果你想不出好
的理由,那么你可能遇到了 std::string。
(cid:127)有些生物(或其他游戏元素,取决于你找什么)的名字超过
16 个字母,但你在内存中只为 16 个字符找到空间?如果是
这样,数据几乎肯定存储在 std::string 中。
(cid:127)名字是否就地存储,要求开发者用 strcpy() 修改它?它可能
是 std::string,因为这样使用原始 C 字符串被认为是糟糕的
做法。
最后,请记住还有一个叫做 std::wstring 的类,用于存储宽字符串。实现非常相似,只是用 wchar_t 代替了每个 char。