C 如何将N个单元格从数组1复制到数组2,并接收erro的返回值?

C 如何将N个单元格从数组1复制到数组2,并接收erro的返回值?,c,arrays,string,C,Arrays,String,我在C中有两个数组,我想把array1的N个单元格复制到array2中 此外,我希望收到复制的单元格的确切数量 函数strncpy不够好,因为它没有返回值(或者它有,但不是我要找的那个) 欢迎您提出任何建议您可以使用 这将毫无问题地复制,您不必关心有多少,因为一旦告知,它将无论如何完成它的任务,除非出现故障,您会自动弹出“访问冲突”。您可以使用 这将毫无问题地复制,而且您不必关心有多少,因为一旦通知,它将无论如何完成它的任务,除非出现故障,您会自动弹出“访问冲突”。这是怎么回事: size_t

我在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
。如果需要通用函数,请传递一个size参数,并在整个范围内使用
memcpy

size_t generic_copy_n(void * dst, void const * src, size_t size, size_t n)
{
    memcpy(dst, src, n * size);
    return n;
}
这个怎么样:

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
。如果需要通用函数,请传递一个size参数,并在整个范围内使用
memcpy

size_t generic_copy_n(void * dst, void const * src, size_t size, size_t n)
{
    memcpy(dst, src, n * size);
    return 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符号。

我假设您希望实现与
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符号。

此外,如果要将单元格从一个数组复制到另一个数组,则需要指定数组的长度。你想要的函数签名是什么?@Zeta:strncpy,但没有多大帮助。之后我必须与
strlen
核实……同样,函数签名很重要。是否要使用类似于
f(双*a1、无符号大小1、双*a2、无符号大小2、无符号单元格)的内容
?或者您真的想复制字符串,如
f(char*str1,char*str2,无符号单元格)
?您是否阅读了
strncpy
的文档?这适用于字符串,而不是任意数组。此外,如果要将单元格从一个数组复制到另一个数组,则需要指定数组的长度。你想要的函数签名是什么?@Zeta:strncpy,但没有多大帮助。之后我必须与
strlen
核实……同样,函数签名很重要。是否要使用类似于
f(双*a1、无符号大小1、双*a2、无符号大小2、无符号单元格)的内容
?或者您真的想复制字符串,如
f(char*str1,char*str2,无符号单元格)
?您是否阅读了
strncpy
的文档?这适用于字符串,而不是任意数组。