#include <stdio.h>#include <sys/ipc.h>#include <sys/msg.h>#include <linux/sched.h>#include <stdlib.h>#include <string.h>typedef long MSISDN;typedef struct { long mtype; long mtext;}msgbuf;voID init(int qID,int key) { qID = msgget(key,IPC_CREAT|0666);}voID sendMsg(long t_ype,long buf,int len,int qID) { int length = sizeof(long) + sizeof(MSISDN); msgbuf *p = malloc(length); p->mtype = t_ype; fputc('2',stderr); voID* tosend = (voID*) buff; fputc('3',stderr); memcpy(p->mtext,tosend,length); fputc('4',stderr); msgsnd(qID,p,length,IPC_NowAIT); free(p);}voID main(){ int qID; int key = 1111; int len= sizeof(MSISDN); long type_1=1; long send = 12345; init(qID,key); fputc('1',stderr); sendMsg(type_1,send,len,qID); getchar();}
问题是memcpy不起作用.我收到警告:
.警告:传递’memcpy’的参数1使得整数指针没有强制转换[默认启用]
此外,当我运行代码时,它会在memcpy上获得一个SIGSEGV信号.我想我没有正确地得到类型转换.
解决方法 这不是类型转换,而是论证本身. p-> mtext是一个long,而不是一个指针.您需要将p-> mtext的地址作为dest参数发送到memcpy.你得到了段错误,因为memcpy试图写入p-> mtext指向的内存地址,这显然不在你进程的地址空间中.这就是原因 – 因为这是一项家庭作业,我将把代码的修复留给你.
总结以上是内存溢出为你收集整理的Linux上的C编程新手,坚持使用类型转换全部内容,希望文章能够帮你解决Linux上的C编程新手,坚持使用类型转换所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)