2012-05-10 7 views
0

Javaの次スニペットはC関数を呼び出します:cでの印刷配列がjavaから渡されました:なぜ配列が印刷されませんか?

Javaコードを

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 

Cコード:上記の私は、次を参照してください起こる

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 ! 

なぜ10の値と異なるサイズの値が得られますか?値10は、1行前に印刷されます。

次はforループのチェックを10にしておくと、配列も印刷されません。どうしてこれなの ?代わりに私は致命的なエラーを取得します。

答えて

5

コンパイラの警告に注意してください。いくつかの警告があります。このコードは壊れています。

11文字(Arr)の配列を宣言していますが、これを10個の文字列の配列として扱います。 Cの文字列は、charへのポインタとして表されます。 strcpy()は、Arrを上書きする可能性が非常に高いため、sizeの値が変更されています。

+0

私はできません。助けてもらえますか? –

関連する問題