编译报错:warning: initialization makes integer from pointer without a cast

HelloWorldd 2004-07-25 08:27:56
linux下用gcc编译时遇到如下问题,请问该怎么解决,谢谢

[root@localhost hainan]# gcc -shared -fPIC -o libjcmpp.so JCMPP.c libtssx_cmpp.a -I. -I/opt/jdk142/include/ -I/opt/jdk142/include/linux
JCMPP.c: In function `Java_JCMPP_jCMPP_1Get_1MO':
JCMPP.c:326: warning: initialization makes integer from pointer without a cast
JCMPP.c:327: warning: initialization makes integer from pointer without a cast
JCMPP.c:331: warning: initialization makes integer from pointer without a cast
JCMPP.c:335: warning: initialization makes integer from pointer without a cast
jchar dest_id[21];
jchar service_id[10];;
jchar sourceUser[21];
jchar msg[160];

...

struct MO_msg mo_msg = {
msgID ,
dest_id,
service_id ,
tp_pid,
tp_udhi ,
msgFormat ,
sourceUser ,
reg_deliver ,
msgLen,
msg
};

jint result = CMPP_Get_MO(conn_id, &mo_msg);
...全文
6743 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2004-07-26
  • 打赏
  • 举报
回复
哦,是这样的C里面不允许使用数组对数组的赋值,譬如下列代码
extern int arr1[10];
extern int arr2[10];
arr1=arr2;
这是不允许的。

你的栈里面已经开辟了空间给dest_id这个数据了,你需要的是memcpy之类的函数底层拷贝数据,或者自己编写循环去复制数组里面的内容。
譬如这样
for(int i=0;i<sizeof(dest_id)/sizeof(dest_id[0]);i++)
MO_msg mo_msg.dest_id[i]=dest_id[i];
不过这个比较麻烦,还是用memcpy比较好,这样写

memcpy(MO_msg mo_msg.dest_id,dest_id,sizeof(dest_id);
其他几个错误和这个一样,所以可以同理修改
HelloWorldd 2004-07-26
  • 打赏
  • 举报
回复
JCMPP.c:326: warning: initialization makes integer from pointer without a cast
JCMPP.c:327: warning: initialization makes integer from pointer without a cast
JCMPP.c:331: warning: initialization makes integer from pointer without a cast
JCMPP.c:335: warning: initialization makes integer from pointer without a cast

jchar dest_id[21];
jchar service_id[10];;
jchar sourceUser[21];
jchar msg[160];
...
struct MO_msg mo_msg = {
msgID ,
dest_id, //line 326,报错1
service_id ,//line 327,报错2
tp_pid,
tp_udhi ,
msgFormat ,
sourceUser , //line 331,报错3
reg_deliver ,
msgLen,
msg //line 335,报错5
};
antijpn 2004-07-25
  • 打赏
  • 举报
回复
意思就是你的初始化是把一个指针类型的对象赋给一个整形变量,而且也没有进行强制类型转换,所以这样编译器给你一个警告,让你小心检查时不是写错了。

具体要看哪一行的问题,把出问题的那一行贴出来先
ttlb 2004-07-25
  • 打赏
  • 举报
回复
检查一下
CMPP_Get_MO(conn_id, &mo_msg);
函数的形参
HelloWorldd 2004-07-25
  • 打赏
  • 举报
回复
结构体的原型如下:
struct MO_msg{
unsigned long long msgID; //消息ID
char dest_id[21];
char service_id[10]; //业务代码
unsigned char tp_pid;
unsigned char tp_udhi;
unsigned char msgFormat; //消息格式
char sourceUser[21]; //发送消息的手机
unsigned char reg_deliver; //是否为应答消息,1=yes,0=no
unsigned char msgLen; //消息长度
char msg[160]; //消息内容
};

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧