我遇到了 stlport STL实施的问题。我将它用于Android,虽然平台可能与此无关。
我正在使用第三方共享库,它试图打开某个文件。该文件路径传递给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实施。