虽然 Android-NDK(Android 的 JNI)我正在尝试使用 STL 来简化字符串的处理。
以下代码,执行时崩溃:
__android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", "Converting");
std::string str("mark");
__android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", str);
执行时,会打印以下堆栈。
DEBUG/RMSDK:RMServices(11786): [Converting]
INFO/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
INFO/DEBUG(31): Build fingerprint: 'generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys'
INFO/DEBUG(31): pid: 11786, tid: 11786 >>> br.com.iba <<<
INFO/DEBUG(31): signal 11 (SIGSEGV), fault addr deadbaad
INFO/DEBUG(31): r0 00000000 r1 00000000 r2 00000027 r3 00000000
INFO/DEBUG(31): r4 00000000 r5 deadbaad r6 00001728 r7 4618bd80
INFO/DEBUG(31): r8 00261938 r9 002a5df0 10 00000000 fp 00000000
INFO/DEBUG(31): ip ffffffff sp beb41880 lr afd154c5 pc afd11dc4 cpsr 40000030
INFO/DEBUG(31): #00 pc 00011dc4 /system/lib/libc.so
INFO/DEBUG(31): #01 lr afd154c5 /system/lib/libc.so
INFO/DEBUG(31): code around pc:
INFO/DEBUG(31): afd11da4 1c2bd00b 2d00682d e026d1fb 2b0068db
如我所见,打印“[Converting]”然后在 std::String 初始化时崩溃。
PS:在我的 Application.MK(在 jni 文件夹下)我有以下行:
APP_STL := gnustl_static
最佳答案
您不能将 std::string 传递给 __android_log_print 的“%s”格式化程序 - 它希望您将它传递给 char *
。使用 std::string 的 c_str()
将完成这项工作:
std::string str("mark");
__android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", str.c_str());
关于android - 崩溃初始化 std::String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050462/