这是我的JNIC代码:
JNIEXPORT jint JNICALL Java_org_avuna_httpd_util_CLibJNI_bind(JNIEnv * this, jclass cls, jint sockfd, jint family, jstring path, jint len) {
struct sockaddr_un sun;
sun.sun_family = family;
const char *npath = (*this)->GetStringUTFChars(this, path, 0);
sun.sun_path = npath;
return bind(sockfd, sun, sizeof(&npath));
}
我只是猜测了如何获得长度,但没有成功(
sizeof(&npath)
)。我不太精通C,但我想有一种方法可以从jstring中获得长度。谷歌什么都没有,我遗漏了什么?
最佳答案
由于变量的类型是const char *
它表明它是以nul
结尾的字符串,因此
size_t length = strlen(npath);
应该够了。
尽管,您对
bind()
的调用是错误的,但是您应该传递地址结构的大小,对于return bind(sockfd, sun, sizeof(sun));
应该是正确的。
关于java - 获取jstring/char的长度*?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30361046/