Linux上的C编程新手,坚持使用类型转换

Linux上的C编程新手,坚持使用类型转换,第1张

概述我对 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;ty 我对 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指向的内存地址,这显然不在你进程的地址空间中.

这就是原因 – 因为这是一项家庭作业,我将把代码的修复留给你.

总结

以上是内存溢出为你收集整理的Linux上的C编程新手,坚持使用类型转换全部内容,希望文章能够帮你解决Linux上的C编程新手,坚持使用类型转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/1025649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存