我在 C 中有两个数组,我想将 array1 的 N 个单元复制到 array2 中。
此外,我想收到复制单元格的确切数量。
该函数strncpy
还不够好,因为它没有返回值(或者它有,但不是我正在寻找的那个)。
任何建议都会受到欢迎
这个怎么样:
size_t copy_n(T * dst, T const * src, size_t n)
{
// method 1
while (n--) { *dst++ = *src++; }
// === OR ===
// method 2
memcpy(dst, src, n * sizeof(T));
return n;
}
用法:
T a[10];
T b[25];
copy_n(b + 5, a + 2, 7); // copies a[2]...a[8] into b[5]...b[11]
这仅适用于固定的、可分配的类型T
。如果您想要一个通用函数,请传递一个大小参数并memcpy
在整个范围内使用:
size_t generic_copy_n(void * dst, void const * src, size_t size, size_t n)
{
memcpy(dst, src, n * size);
return n;
}
您可以使用memcpy
memcpy(Array2,Array1,sizeof(*Array1)*N);
这将毫无问题地复制,您不必关心有多少,因为一旦被告知它将无论如何都会完成它的任务,除非您自动弹出“访问冲突”的失败。
我假设您想达到与相同的效果,strncopy
但也想知道已复制了多少字节。这可以通过以下代码完成:
size_t special_strncopy(char * dest, const char * src, size_t count){
const size_t original = count--;
if(count != 0){
while(*src && count--){
*dest++ = *src++;
}
}
*dest = '\0'; /* set null-termination symbol */
return original - count;
}
注意count == 0
将导致未定义的行为,因为它包含 0 符号。