Новичок в программировании на C в Linux, застрял при приведении типов

Я новичок в программировании на 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 не работает. Получаю предупреждение:

.предупреждение: передача аргумента 1 «memcpy» делает указатель из целого числа без приведения [включено по умолчанию]

Также, когда я запускаю код, он получает сигнал SIGSEGV в memcpy. Думаю, я неправильно понимаю приведение типов.

5
задан Bill the Lizard 21 September 2012 в 17:27
поделиться