使用 D 切片的 memset() 和 memcpy()

Posted

技术标签:

【中文标题】使用 D 切片的 memset() 和 memcpy()【英文标题】:memset() and memcpy() using D slices 【发布时间】:2015-08-15 17:58:11 【问题描述】:

在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]

【问题讨论】:

[0..8] 表示 [0, 1, 2, 3, 4, 5, 6, 7]。所以,你需要size,你写size-1 【参考方案1】:

我假设m 代表memcpy/memset 代码中数组的长度。

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

请注意,如果数组边界重叠,您将在第一行得到运行时错误。

【讨论】:

以上是关于使用 D 切片的 memset() 和 memcpy()的主要内容,如果未能解决你的问题,请参考以下文章

二维数组的动态分配(new)初始化(memset)和撤销(delete)

OCaml 中的 D 类不可变数据切片

memset()初始化为1的那些事

c语言string函数问题

关于 ndarrays 的形状不可知切片

memset赋值