memset() и memcpy() с использованием D слайсов
На языке 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]
,
1 ответ
Я предполагаю m
представляет длину массива в вашем memcpy
/memset
код.
skip[0 .. size - shift] = skip[shift .. size]; // may throw
skip[size - shift .. size] = 0;
Обратите внимание, что вы получите ошибку во время выполнения в первой строке, если границы массива перекрываются.