gpt4 book ai didi

java - JNA:指向字符的指针**

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:04 25 4
gpt4 key购买 nike

我拥有下一个 C 函数:

int fillWithNames(const char*** names, int *n);

我使用 JNA 将其转换为 java,过程如下:

public interface PlayersLibrary extends Library {
PlayersLibrary INSTANCE = (PlayersLibrary) Native.loadLibrary("player", PlayersLibrary.class);

int fillWithNames(PointerByReference names, IntByReference n);

}

如何在 names 中打印此方法返回的字符串?

我想做这样的事情:

PlayersLibrary.INSTANCE.fillWithNames(names, n);

Pointer first = names.getValue(); // char**
String a = first.getPointer(0).getValue() // char*
System.out.println(a);

但在这种情况下,names.getValue() 返回 null,我不知道该怎么做

我该怎么做才能解决这个问题?

最佳答案

使用names.getValue().getStringArray(0, n.getValue()]) .

我推断 n 参数告诉被调用者要填写多少个名字。 getStringArray() 会将内存中的连续指针值转换为字符串,直到它遇到 NULL 值;如果你的被调用者没有以 NULL 指针终止,你需要明确地告诉它要读取多少指针(表面上是 n 调用中的参数 fillWithNames()).

编辑

所以长度确实在 n 参数中返回。如果被调用者向该参数写入一个零,那么它告诉您它没有名称(这就是为什么您在另一个参数中得到 null 的原因)。

关于java - JNA:指向字符的指针**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com