Android-NDK 的 GGC/C++ 对于 std::string::find/std::getline(...) 来说似乎不稳定
Android-NDK's GGC/C++ appears to be erratic for std::string::find/std::getline(...)
对于负数字符,std::string::find(char ch)
和std::getline(stream, str, delim)
似乎不稳定;在Android NDK R6B上。基本上是std::string::find returns
std::string::npos
,例如当字符是0xEB
时。有人发现他们有什么问题吗?它们似乎对微软风投公司很有效。
字符在MSVC中默认有符号,在NDK上的GCC中默认无符号。要改变这一点,请在Android.mk中添加以下行:
LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS) -fsigned-char
这可能会破坏采用字符参数的库函数,如strchr
。问题是,他们将该字符作为int
,并且如果char为负数/超过0x7F,则将char扩展为int的规则会随编译器设置而变化。通过有符号字符设置,负字符值用1位扩展为负整数,而无符号字符用0位扩展为256以下的正整数。图书馆期望后者。
我最终在我的项目中重新定义了strchr
,如下所示:
// In the common header
extern char *strchr_sb(const char *s, int c);
#define strchr strchr_sb
// Elsewhere
#undef strchr
char *strchr_sb(const char *s, int c)
{
return strchr(s, c & 0xff);
}
相关文章:
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 命名空间 std:: 不包含可选
- std 不包含,但它应该添加库
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- ArUco姿态估计中的不稳定值
- 当我使用 fstream 与 for 一起使用时值不稳定,C++
- 不稳定的C :每行适应性变化多变量初始化
- 加入向量的所有线程后,程序不稳定,而不是退出
- clEnqueueWriteImage 在执行时间上不稳定
- 不稳定:如何设置初始化器列表和函数参数的凹痕
- 图形场景中的方位角公式计算会产生不稳定的结果
- 返回值std ::不匹配的相等向量
- 配置不稳定以添加括号
- 向量中的项目的指针不稳定
- C++ 今天的多线程,C++ 11 的不稳定情况 - 书籍建议
- 分析计时不稳定
- 格式化构造构件成员初始化,不稳定
- 可以不稳定和/或通用的GUI划分字符串文字
- 是否有两个不平等大小的向量的STD ::不匹配
- Android-NDK 的 GGC/C++ 对于 std::string::find/std::getline(...) 来说似乎不稳定