Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java传入的c打印数组:为什么';阵列不会被打印出来吗?_Java_C_Arrays_Java Native Interface - Fatal编程技术网

从java传入的c打印数组:为什么';阵列不会被打印出来吗?

从java传入的c打印数组:为什么';阵列不会被打印出来吗?,java,c,arrays,java-native-interface,Java,C,Arrays,Java Native Interface,以下java代码段调用c函数: Java代码 为什么大小的值与10不同。值10在前一行打印 接下来,如果我将for循环中的检查保持为10,那么数组也不会被打印。为什么会这样?相反,我得到了一个致命错误。您应该注意编译器警告,其中应该有几个警告。这个密码坏了 您正在声明一个包含11个字符的数组(Arr),但将其视为一个包含10个字符串的数组。C中的字符串表示为指向char的指针。您的strcpy()很可能超出了Arr,这导致size的值发生变化。您应该注意编译器警告,其中应该有几个警告。这个密码坏

以下java代码段调用c函数:

Java代码

为什么大小的值与10不同。值10在前一行打印


接下来,如果我将for循环中的检查保持为10,那么数组也不会被打印。为什么会这样?相反,我得到了一个致命错误。

您应该注意编译器警告,其中应该有几个警告。这个密码坏了


您正在声明一个包含11个字符的数组(
Arr
),但将其视为一个包含10个字符串的数组。C中的字符串表示为指向
char
的指针。您的
strcpy()
很可能超出了
Arr
,这导致
size
的值发生变化。

您应该注意编译器警告,其中应该有几个警告。这个密码坏了


您正在声明一个包含11个字符的数组(
Arr
),但将其视为一个包含10个字符串的数组。C中的字符串表示为指向
char
的指针。您的
strcpy()。你能帮个忙吗?我办不到。你能帮忙吗
 String s[] = new String[10];
    for(int i=0;i<10;i++) {
        s[i] = "s";
    }
    o.printArrayLength(s); // prints the array length from c code
void Java_Package_CallMethodOfSuperClass_printArrayLength
    (JNIEnv *env, jobject obj, jobjectArray arr) {

jsize size = (*env)->GetArrayLength(env,arr);
printf("\n");
printf("Size of array from C : ");
printf("%d",size);
jcharArray chrArr = (*env)->GetCharArrayElements(env,arr,NULL);
char Arr[11];
strcpy(Arr,chrArr);
int i = 0;
printf("Now printing the array declared in java from c :");
printf("SIZE SIZE SIZE SIZE : %d",size);
for(i=0;i<size;i++) {
    printf("Inside for loop !");
    printf("%s",Arr[i]);
}
     //jobjectArray obArr = (*env)->NewObjectArray(env,size,(*env)->FindClass(env,"[L"),NULL);
    //(*env)->SetObjectArrayElement(env,obArr,0,chrArr);
}
Size of array from C : 10
Now printing the array declared in java from c :
SIZE SIZE SIZE SIZE : -549339085 // What the heck !