memcpy()的用法

use*_*670 2 c memcpy

因为我和C玩了两天,所以我总是遇到新问题.现在我想把我的数据记忆到char buf中,但我遇到了一些问题:我的代码如下:

         int main(int argc, char *argv[])
        {
         int sockfd, portno, n;
         struct sockaddr_in serv_addr;
         struct hostent *server;
     unsigned char buf[1024];

        struct profile_t 
      {
        unsigned char length;
        unsigned char type;
        unsigned char *data;
      };

        typedef struct profile_datagram_t
      {
        unsigned char src[4];
        unsigned char dst[4];
        unsigned char ver;
        unsigned char n;
        struct profile_t profiles[MAXPROFILES];     
      } header;


      header outObj;

      outObj.src[0] =1;
  outObj.dst[0] = 2;
  outObj.ver = 1;
  outObj.n = 2;


  outObj.profiles[0].length = 10;
  outObj.profiles[0].type = 1;
  outObj.profiles[1].length = 10;
  outObj.profiles[1].type = 2;




  memcpy(buf,outObj.src,4);
  memcpy(buf+4,outObj.dst,4);
  memcpy(buf+8,outObj.ver,1);
  memcpy(buf+9,outObj.n,2);


  memcpy(buf+10,outObj.profiles[0].length,1);
  memcpy(buf+11,outObj.profiles[0].type,1);
  memcpy(buf=12,outObj.profiles[0].data,10);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

警告:传递参数2的memcpymake指针来自整数而没有强制转换
错误:unsigned char[1024]从类型中分配类型时不兼容的类型int

错误是为了memcpy().任何人都可以解释我memcpy()以及我出错的地方.

Jim*_*uck 6

您需要传递结构的各个字段的地址.按名称传递数组时,这自动是数组开头的地址.但是非数组字段需要address-of运算符&:

memcpy(buf+10,&outObj.profiles[0].length,1);
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果您更改以下类型,则更好length:

memcpy(buf+10,&outObj.profiles[0].length,sizeof(outObj.profiles[0].length));
Run Code Online (Sandbox Code Playgroud)