2013-04-23 3 views
3

Мне нужно сдвинуть кусок памяти с разнесенной памятью. В настоящее время я создаю временный кусок памяти, а затем скопировать его и их переписывание его обратно со сдвигомСамый простой способ сдвинуть кусок памяти malloc

void * buf = malloc(5); 
void * temp = malloc(5); 

memcpy(temp, buf, 5); 
memset(buf, 0, 5); 
memcpy(buf, temp + 1, 4); 

Есть ли лучший способ сделать это?

+0

мне любопытно. Зачем ты это делаешь? Какова ваша цель в этом? –

ответ

12

Да, используйте memmove:

char * buf = malloc(5); // pointer arithmetic only on chars! 

memmove(buf, buf + 1, 4); 
memset(buf + 4, 0, 1); 
+1

Разве вы не смещаете это неправильно ... вы перекладываете его на один. Это должно быть 'memmove (buf, buf + 1, 4);' и 'buf [4] = 0;' Да? –

+0

@KScottPiel: да, хорошая точка! Я неправильно понял это. Благодаря! –

+4

'buf [4] = 0' будет делать вместо memset. –

Смежные вопросы