以下是显示我想要的示例:
int buf[3] = {10, 20, 30};
int * send_buf = (int *)malloc(5 * sizeof(int));
*send_buf = 1;
*(send_buf + 4) = 1;
将send buf复制到send_buf后,send_buf中的值应为:
1 10 20 30 1
有人可以让我知道在不使用memcpy()
或memmove()
的情况下,最有效的方法是什么?
答案 0 :(得分:1)
尝试以下更改 -
int buf[3] = {10, 20, 30};
int * send_buf = (int *)malloc(5 * sizeof(int));
*send_buf = 1;
for(i=1;i<=3;i++) // this will work for you.
*(send_buf+i)=buf[i-1];
*(send_buf + 4) = 1;
答案 1 :(得分:0)
memcpy()的一个简单实现是:
memcpy(uint8_t *dest, uint8_t *src, size_t num_bytes) {
for (size_t i=0; i<num_bytes; ++i)
dest[i] = src[i];
}
所以,既然我们没有充分的理由不能使用memcpy()
,那么让我们只是内联身体:
int buf[3] = {10, 20, 30};
int *send_buf = malloc(5 * sizeof(int));
send_buf[0] = 1;
send_buf[4] = 1;
for (int i=0; i<3; ++i)
send_buf[i + 1] = buf[i];
答案 2 :(得分:0)
嗯,可以随时使用sprintf
和sscanf
char buffer[1024];
sprintf(buffer, "%d %d %d", buf[0], buf[1], buf[2]);
sscanf(buffer, "%d%d%d", send_buf[1], send_buf[2], send_buf[3]);