gpt4 book ai didi

c char[] to jstring printf 适用于 int 类型,但不适用于 string

转载 作者:行者123 更新时间:2023-11-30 16:31:04 24 4
gpt4 key购买 nike

我们有一个供应商提供的 api,其结构定义为

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

他们以这种结构向我们发送数据,然后我们必须通过 jni 将其传递给我们的 java 应用程序。

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 语言技能非常基础,所以如果有人能指出我在这里所做的愚蠢的事情,我将不胜感激。谢谢,

最佳答案

我会尝试一下。我尝试了你的代码,但没有得到相同的行为

#include <stdio.h>

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

int main (int p_argc, char *p_argv[])
{
duo_word_t l_duo_word =
{
.duo_word = {'1','2','3','4'}
};

/** Works fine. */
printf("value s: %s\n", l_duo_word.duo_word);

/** Doesn't work. */
printf("value i: %i\n", l_duo_word.duo_word);

return 0;
}

输出:

$ ./test 
value s: 1234
value i: 159754736

我不明白为什么使用格式说明符 %s 在您的情况下会返回空字符串。除此之外,我不明白你为什么使用 %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);

您能展示一下如何初始化您的结构吗?

关于c char[] to jstring printf 适用于 int 类型,但不适用于 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50812755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com