JNI将字符串从java传递到c++;然后通过c++;字符串到字符串数组

JNI将字符串从java传递到c++;然后通过c++;字符串到字符串数组,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,我用java声明了本机方法 static { // Replace "Myfile" with the name of your Native File System.loadLibrary("JohnnyX"); } // Declare your native methods here public static native String string(StringBuffer sb); 并将字符串缓冲区传递给它 System.out.println(string(sb

我用java声明了本机方法

static
{
    // Replace "Myfile" with the name of your Native File
    System.loadLibrary("JohnnyX");
}

// Declare your native methods here
public static native String string(StringBuffer sb);
并将字符串缓冲区传递给它

System.out.println(string(sb));
和在我的JNYNX.CPP中,我使用以下方法将java字符串转换成C++字符串。
std::string jstring2string(JNIEnv *env, jstring jStr) 
{
    if (!jStr)
        return "";

    const jclass stringClass = env->GetObjectClass(jStr);
    const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
    const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(jStr, getBytes,
                                                                       env->NewStringUTF("UTF-8"));

    size_t length = (size_t) env->GetArrayLength(stringJbytes);
    jbyte *pBytes = env->GetByteArrayElements(stringJbytes, NULL);

    std::string ret = std::string((char *) pBytes, length);
    env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);

    env->DeleteLocalRef(stringJbytes);
    env->DeleteLocalRef(stringClass);
    return ret;
}

extern "C" JNIEXPORT jstring JNICALL Java_com_example_rsolver_Solver_string(JNIEnv *env, jobject object,jstring string) {
    // Converting Java String into C++ String and calling a "solution" method and passing c++ string
    return solution(jstring2string(env,string));
}
我的解决方法是:

string solution (string argv[]) {
    // this will return a string
}

我的问题是,如何在解决方案中传递C++字符串到字符串数组(字符串ARVV[])? 一个简单的解决方案是临时字符串对象

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_rsolver_Solver_string(JNIEnv *env, jobject object,jstring string) {
    // Converting Java String into C++ String and 
    // calling a "solution" method and passing c++ string
    std::string tmp{jstring2string(env,string)};
    return solution(&tmp);
}
这为
解决方案
提供了一个由1个元素组成的数组。但是
solution()
不知道这个数组有多少个元素,所以您也必须添加数组大小

std::string solution (int size, std::string argv[]) {
    // this will return a string
}

// ...
std::string tmp{jstring2string(env, string)};
return solution(1, &tmp);

更好的是,跳过原始数组,并传递
std::string
s的
std::vector

std::string solution (const std::vector<std::string> &argv) {
    // this will return a string
}

// ...
std::vector<std::string> tmp = { jstring2string(env, string) };
return solution(tmp);
std::string解决方案(const std::vector和argv){
//这将返回一个字符串
}
// ...
std::vector tmp={jstring2string(env,string)};
返回溶液(tmp);