0

我遇到了stlport STL 实现的问题。我将它用于 Android,尽管平台在这里可能不相关。我正在使用第三方共享库,它试图打开某些文件。该文件路径被传递给函数 as std::string,然后是库内联函数:

inline bool ReadProtoFromTextFile(const string& filename, Message* proto) {
  return ReadProtoFromTextFile(filename.c_str(), proto);
}

然后将该 C 字符串用作open()函数的参数。问题是使用stlport时,ReadProtoFromTextFile函数接收到无效的 C 字符串,因此无法打开文件。那个无效的 C 字符串是确定性的,它总是这个字符序列:

p!&\xffffffe8.

当我尝试从我的代码中调用 c_str() 时,它总是有效的。我尝试使用 LLDB 查看有问题的字符串并收到此错误:错误:无法准备在目标中运行表达式

_M_buffers._M_end_of_storage尽管如此,仍然可以检查该字符串的内部结构,并且字段中是否存在有问题的字符串序列。中也有正确的顺序_M_buffers._M_start_of_storage

当我切换到gnustl实现时,问题就消失了。LLDB 显示 .c_str() 没有任何问题。对我来说,这看起来像是一些内联问题,但它可能是什么?毕竟 stlport_shared是 Google 推荐的实现。

4

0 回答 0