将短数组的值复制到长数组

时间:2014-07-25 15:52:20

标签: c

以下是显示我想要的示例:

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()的情况下,最有效的方法是什么?

3 个答案:

答案 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)

嗯,可以随时使用sprintfsscanf

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]);