0

我在 C 中有两个数组,我想将 array1 的 N 个单元复制到 array2 中。

此外,我想收到复制单元格的确切数量。

该函数strncpy还不够好,因为它没有返回值(或者它有,但不是我正在寻找的那个)。

任何建议都会受到欢迎

4

3 回答 3

2

这个怎么样:

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;
}
于 2012-08-05T12:50:46.397 回答
1

您可以使用memcpy

memcpy(Array2,Array1,sizeof(*Array1)*N);

这将毫无问题地复制,您不必关心有多少,因为一旦被告知它将无论如何都会完成它的任务,除非您自动弹出“访问冲突”的失败。

于 2012-08-05T12:43:05.683 回答
1

我假设您想达到与相同的效果,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 符号。

于 2012-08-05T12:58:15.477 回答