将char*tab[10]转换为java对象(JNI)

将char*tab[10]转换为java对象(JNI),java,c,java-native-interface,Java,C,Java Native Interface,我正在尝试使用JNI在java中使用C API。我不是C程序员 这是我必须转换的C对象:char*tab[10] 首先,我不确定它是什么意思:它是指向char选项卡的指针,还是指向char的指针选项卡?有什么区别吗 那么,等效的java对象是什么呢?它很可能是一个由10个字符串组成的数组,因此可以直接建模为: String[] tab = new String[10]; 它也可能是一个字符缓冲区数组,因此您可以使用StringBuilder而不是字符串。请记住,Java数组本身就是对象,并且知

我正在尝试使用JNI在java中使用C API。我不是C程序员

这是我必须转换的C对象:char*tab[10]

首先,我不确定它是什么意思:它是指向char选项卡的指针,还是指向char的指针选项卡?有什么区别吗


那么,等效的java对象是什么呢?

它很可能是一个由10个字符串组成的数组,因此可以直接建模为:

String[] tab = new String[10];
它也可能是一个字符缓冲区数组,因此您可以使用StringBuilder而不是字符串。请记住,Java数组本身就是对象,并且知道它们的大小,因此信息不会附加到类型上,这与C中不同,C中的数组大小是类型特征


我不希望通过JNI直接传输类型/值;这里需要一些转换胶水代码。

char*tab[10]是指向第一个元素上字符点数组的指针

以下是JNIAPI:

JNI中C char的等价类型是jchar——在java中是char基元类型; 使用C字符数组可以做的可能是:将其复制到java中的existand String对象或java基本字符数组中。 有用链接:

第二条路是梅看起来是这样的:

将java字符数组传递到JNI调用中,或者使用NewArray函数从C代码创建新的java数组。然而,在java中,您将以指向数组的指针结束。 他们将您的C字符复制到java的:

jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);
其中jEnv-是java环境,通过JNI调用传递。如果你有一个指针,你可能需要像*C_CharArray一样去引用它。我想这可能会解决。

这是错误的-tab不是指向10个字符数组的指针,而是指向字符的10个指针数组。