C memcpy unsigned char到1元素unsigned char数组,用于校验和计算

C memcpy unsigned char到1元素unsigned char数组,用于校验和计算,c,memcpy,unsigned-char,C,Memcpy,Unsigned Char,有一个字符数组ACKbuffer[2],所以我首先将所需的元素强制转换为unsigned char,但当我尝试将其memcpy到unsigned char数组时,它给了我一个错误 错误: note: expected ‘const void * restrict’ but argument is of type ‘unsigned char’ extern void *memcpy (void *__restrict __dest, const void *__restrict __src,

有一个字符数组ACKbuffer[2],所以我首先将所需的元素强制转换为unsigned char,但当我尝试将其memcpy到unsigned char数组时,它给了我一个错误

错误:

note: expected ‘const void * restrict’ but argument is of type ‘unsigned char’
 extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
              ^~~~~~
swap_client.c: In function ‘swap_write’:
swap_client.c:185:17: warning: passing argument 2 of ‘memcpy’ makes pointer from integer without a cast [-Wint-conversion]
     memcpy(ACK, ACK_actual, 1);
我还尝试了另一种方法,但得到的初始值设定项无效:

理想情况下,我希望我的ACK数组从ACKbuffer中保存该值

在这个memcpy的召唤中

memcpy(ACK, ACK_actual, 1);
变量ACK_actual的类型为unsigned char

unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
但函数需要指针类型

只要写

memcpy(ACK, ACKbuffer + 1, 1);
对于第二个代码段,您应该编写

unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
unsigned char ACK [1] = { ACK_actual };

memcpyACK,确认实际值,1;->memcpyACK,&ACK_actual,1;。ACK_actual不是指针,也不是衰减为指针的数组。或无符号字符ACK[1]={ACK\u actual};。我求助于使用memsetACK、ACK_actual、sizeofACK_actual;但这是错的吗?这也行,但为什么要把它弄得这么复杂呢?无符号字符ACK[1]={ACKbuffer[1]};从C99开始工作正常。为什么首先需要一个元素数组?@walnut校验和函数接受长度可变的无符号字符数组作为输入。我使用相同的函数计算最多125字节长的消息和1字节的ACK.IHO的校验和,这一点类似于使用C++编译器编译C,但是这会复制整个ACKbuffer,不是吗?我只想要第二个元素。@mLstudent33为什么?已明确指定复制1字节。@mLstudent33是一个输入错误。应为ACKbuffer+1@mLstudent33函数参数是指向void的指针。指向任何类型对象的指针都可以隐式转换为指向void的指针。@VladFrommosco您是对的,没有阅读问题,只有代码。
memcpy(ACK, ACKbuffer + 1, 1);
unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
unsigned char ACK [1] = { ACK_actual };