c char [] в jstring printf работает для типа int, но не для строки - PullRequest
0 голосов
/ 12 июня 2018

У нас есть API, предоставленный поставщиком, структура которого определена как

typedef   struct 
{ 
    char duo_word[8]; 
} duo_word;

Они отправляют нам данные в этой структуре, которые мы затем должны передать в наше Java-приложение через jni.

printf("Number:  : %i\n", duo_word_inst);

печатает правильное значение типа int, например, 52932, но

printf("Number:  : %s\n", duo_word_inst); 

ничего не печатает.Более того, если я использую код jni ниже, мой процесс java получает тарабарщину.

jstring jstrBuf = (*env)->NewStringUTF(env, (char*)(duo_word_inst));

(*env)->SetObjectField(env, *ret_obj, fld_id, jstrBuf);

отправляет тарабарщину на java, например, ÄÎ

   // I have got some example data captured from VS debugger below.
   duo_word duo_word_inst = { .duo_word = { 'º', '\b', '\x1', '\0', 'À', '\xe', '2', 'a' } };

    printf("          %i ", duo_word_inst); // gives 67770 which is correct.

Мои навыки C очень элементарны, поэтому я был бы очень признателен, еслиКто-то может указать на глупость, которую я здесь делаю.Спасибо,

1 Ответ

0 голосов
/ 12 июня 2018

Я попробую.Я попробовал ваш код, но не получаю такого же поведенияСтрока в вашем случае.Кроме того, я не понимаю, почему вы используете %i.При этом вы должны получить предупреждение:

$ gcc test.c -Wall -Wpedantic -o test
test.c: In function ‘main’:
test.c:19:16: warning: format ‘%i’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat=]
         printf("value i: %i\n", l_duo_word.duo_word);

Не могли бы вы показать, как вы инициализируете свою структуру?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...