99.9RMB 悬赏一技术支持

2021-02-26 11:00:27 +08:00
 phpIsNumberOne
概述:

使用 C 打包为 Android 的 C-shar(so)动态链库,然后使用 Fltter 的 ffi 调用。现在我实现了函数为 int 类型的相互调用,但是 string(*char)始终有问题。

要求:

将 C 程序打包为 so 动态链库,并能在 Flutter 项目上正常使用,仅 Android 即可,使用 CMake ; C 程序:

#include <stdio.h>
#include <stdlib.h>
int Hello(){
    return 233;
}

char *World(){
    char *r = "1234";
    return r;
}

char *Test(char *str)
{
    return str;
}
说明:
相关资料:
6958 次点击
所在节点    程序员
40 条回复
kosgug
2021-02-26 11:02:42 +08:00
建议把悬赏金额调低
liprais
2021-02-26 11:03:04 +08:00
单纯的提问都比你这 99.9 好
20015jjw
2021-02-26 11:05:37 +08:00
这就跟求包养
一个月只要两包泡面一样...
pekki
2021-02-26 11:10:07 +08:00
你是不是把程序员的时薪想的太低了。。。
youthfire
2021-02-26 11:14:28 +08:00
传说中的伤害性不大,侮辱性极强
heyjei
2021-02-26 11:17:15 +08:00
一杯星巴克或者一杯瑞幸的外卖都比你这个 99.9 更有吸引力啊
hanxiV2EX
2021-02-26 11:17:16 +08:00
试试这样?记得 free 它

char *World(){
char *tmp = "1234";
char *r = malloc(strlen(tmp)+1);
strcpy(r, tmp);
return r;
}

void FreeWorld(char *){
free(r)
}
wzb0909
2021-02-26 11:17:51 +08:00
99 元让人看完你的字都不够啊
hanxiV2EX
2021-02-26 11:23:03 +08:00
建议 @phpIsNumberOne 重新学习 C 语言吧,内存没搞清楚写出来的东西会挂的。
danhahaha
2021-02-26 11:27:19 +08:00
建议改成 100.99 或者 0.1K 这样看起来比较多
vone
2021-02-26 11:30:14 +08:00
没八百这活干不了。
hanssx
2021-02-26 11:30:48 +08:00
99.9 不少了,而且题主提问的方式挺正规的吧?
话说我记得*和后面的之间是不是加个空格更 c ?
mm163
2021-02-26 11:40:04 +08:00
Flutter 没用过,不清楚。
java 虚拟环境与 c 不是一个空间的,字符串处理应该使用 jni,不能直接返回指针。
pkookp8
2021-02-26 11:50:06 +08:00
我觉得需要开辟一块共享内存或者普通内存用来操作字符串。world 的 1234 是在字符常量区,可读不可写。test 的内存不知道哪来的,不知道可不可读写

char*不行 int 行,显然是内存问题。但是不懂 flutter,无能为力。试试对入参或出参进行申请内存,使用后释放。或者 socket 交互
anonydmer
2021-02-26 11:51:38 +08:00
亲,你这样用 C 返回字符串是不行的哦,内存管理错了
hantsy
2021-02-26 11:53:19 +08:00
9 。9 包邮
Chenamy2017
2021-02-26 12:48:54 +08:00
好好学学 C 语言吧,指针内存什么的。
你这个 World 函数返回的指针有问题。
phpIsNumberOne
2021-02-26 13:53:59 +08:00
@hanxiV2EX
@Chenamy2017
见笑了,C 就大学学了下,后面就没深入了
wangjunling
2021-02-26 14:02:44 +08:00
还不如直接求帮助, 99 悬赏真是侮辱程序员这个行业呀, 理解问题, 解决问题, 至少你的来个三位数呀, 999 或许真有人接
hanxiV2EX
2021-02-26 14:10:09 +08:00
楼主提问表述确实很清楚,有经验的一眼也就能看到问题所在。然后提供的资料也还全面,这样的提问还是值得称赞的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/756414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX