Linux上的C编程新手,坚持使用类型转换
发布时间:2020-12-14 01:00:05 所属栏目:Linux 来源:网络整理
导读:我对 Linux上的编程很新.我正在尝试在我的一个任务中实现一个消息队列.但我无法做到.代码如下: #include stdio.h#include sys/ipc.h#include sys/msg.h#include linux/sched.h#include stdlib.h#include string.htypedef long MSISDN;typedef struct { long
我对
Linux上的编程很新.我正在尝试在我的一个任务中实现一个消息队列.但我无法做到.代码如下:
#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指向的内存地址,这显然不在你进程的地址空间中.
这就是原因 – 因为这是一项家庭作业,我将把代码的修复留给你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |