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