JNI如何将字符串转换为字符数组

5

不熟悉c++,有人可以帮我将cmd添加到myStr数组中并传递给main()函数吗?这是我目前的代码:

JNIEXPORT void JNICALL Java_my_package_JNIActivity_callCmdLine(
    JNIEnv *env, jobject obj, jstring cmd)
{
    const char *nativeString = env->GetStringUTFChars(cmd, 0);
    env->ReleaseStringUTFChars(cmd, nativeString);

    char * myStr [] = {"v", nativeString};

    //int main(int argc, char *argv[])
    main(1, myStr); 
}

你确定以 modified UTF-8 编码的字符串是“本地”的吗?使用 String.GetBytes() 将一个“字符串编码为字节序列,使用平台的默认字符集。” - Tom Blodget
2个回答

7

好的,在你完成之前不要发布它。

char * nativeString;

{    const char * _nativeString = env->GetStringUTFChars(cmd, 0);
     nativeString = strdup (_nativeString);
     env->ReleaseStringUTFChars(cmd, _nativeString);
}

char * myStr [] = {"v", nativeString};
main(1, myStr); 

free (nativeString);

我收到警告:从字符串常量转换为'char*'已被弃用 错误:从'const char *'到'char *'的转换无效 - user1159819
JNIEnv 被定义为 typedef const struct JNINativeInterface_ *JNIEnv;,所以这个例子无法编译。 - St.Antario

3

为什么不利用对象来保证自动完成删除呢?

相关的IT技术内容。
class ConvertStringHelper
{
public:
    ConvertStringHelper( JNIEnv *env, jstring value )
    {
        m_str = env->GetStringUTFChars(value, 0);
        m_value = &value;
        m_env = env;
    }
    ~ConvertStringHelper()
    {
        m_env->ReleaseStringUTFChars( *m_value, m_str);
    }

    jstring* m_value;
    const char *m_str;
    JNIEnv *m_env;
};

然后:

    ConvertStringHelper helper( env, cmd );
    const char* nativeStr = helper.m_str;
    // nativeStr is valid in helper's scope and memory will be cleanly released when exiting the scope!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接