gpt4 book ai didi

c - memcpy() 的使用

转载 作者:行者123 更新时间:2023-12-02 07:46:10 25 4
gpt4 key购买 nike

这两天我一直在玩C,我总是遇到新问题。现在我想将我的数据 memcopy 到一个 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);

我收到以下错误:

warning: passing argument 2 of memcpy makes pointer from integer without a cast
error: incompatible types when assigning to type unsigned char[1024] from type int

错误是针对 memcpy() 的。谁能给我解释一下 memcpy() 以及我哪里出错了。

最佳答案

您需要传递结构各个字段的地址。当您按名称传递数组时,该名称自动成为数组开头的地址。但是非数组字段需要address-of operator &:

memcpy(buf+10,&outObj.profiles[0].length,1);

顺便说一句,如果您更改 length 的类型,这会更好:

memcpy(buf+10,&outObj.profiles[0].length,sizeof(outObj.profiles[0].length));

关于c - memcpy() 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com