2015-08-15 8 views
1

В языке D, каковы эквиваленты следующих утверждений предполагающих коды: -MemSet() и тетср() с помощью D ломтиков

int size = 8; 
int shift = 1; 
int[size] skip; 
int[size] suff; 

memcpy(&skip[0], &skip[0]+shift, (m-shift)*(int.sizeof)); 
memset(&skip[0]+(m-shift),0, shift*(int.sizeof)) 

Я думал, преобразование будет: -

skip[0 .. size-1] = skip[shift .. size-1 ]; //For the memcpy(); 
skip[0 .. size-1] = 0;       //For the memset(); 

Но это не работает для меня, так как dmd (v2.066.1) дает ошибку slice [8..7] exceeds array bounds [0..8].

+3

[0..8] означает [0, 1, 2, 3, 4, 5, 6, 7]. Итак, вам нужно 'size', где вы пишете' size-1'. – Gassa

ответ

1

Я предполагаю, что m представляет длину массива в вашем memcpy/memset код.

skip[0 .. size - shift] = skip[shift .. size]; // may throw 
skip[size - shift .. size] = 0; 

Обратите внимание, что в первой строке вы получите ошибку выполнения, если границы массива перекрываются.

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

  • Нет связанных вопросов^_^