JNI: чтение текстового файла в коде C и возврат в SDK

Я пытаюсь создать приложение для Android для чтения текста из текстового файла, используя NDK. Мой код C читает строку в переменную и возвращает строковую переменную в код Java. Но когда я запускаю приложение Android, строка, отображаемая в TextView, выглядит как символы, такие как @, за которыми следуют несколько прямоугольников. Каков формат возврата строк из JNI? Проверьте приведенный ниже код. Могу ли я прочитать системный файл без какого-либо другого разрешения? Что будет делать оператор printf ()?

Java-код:

package com.example.openfile;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
public native String ndkopenfile();
static{
    System.loadLibrary("mylib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //TextView textView1 = new TextView(this);
    //textView1.setText(ndkopenfile());
    Button button1 = (Button)findViewById(R.id.button1);
    button1.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    String str1;
    Log.d("Click","The button has been clicked to open the file");

    str1=ndkopenfile();

    //setTitle(str1);
    TextView tv = (TextView)findViewById(R.id.textView1);
    tv.setText(str1);
}

}

Код C:

JNIEXPORT jstring JNICALL Java_com_example_openfile_MainActivity_ndkopenfile
(JNIEnv *env, jobject this)
{

    jstring str1[20];
    FILE* fp = fopen("/sdcard/x.txt","w+");
    if(fp!=NULL)
    {
        fgets(str1,20,fp);
        fflush(fp);
        fclose(fp);
        return(*env)->NewStringUTF(env,str1);
    }
    else
    {
        fclose(fp);
        return(*env)->NewStringUTF(env,"Error opening file!");
    }
 }

Ответы на вопрос(2)

Ваш ответ на вопрос