这是我的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/

10-12 00:38