
C语言#memcpy复制整型数组犯的低级错误
也就是说size_t n 是以字节为单位的,sizeof(a) / sizeof(a[0]) 得到 8, 是数组的长度,而不是数组所占的空间内存,这里只复制过去了 8 个字节,刚好就是两个int整型,即 a[0] 和 a[1] 被复制了,后面的元素没有被复制。下意识的用 sizeof(a) / sizeof(a[0]) 去计算数组长度,导致复制后,打印b数组时,只有b[0] 和b[1]被复制了,为
·
使用memcpy复制字符串时,
const int n = 50;
char str_1[] = "error";
char str_2[n];
memcpy(str_2, str_1, strlen(str_1) + 1);
因为字符串是字符数组,其中的每一位占 1 字节,所以这里用strlen得出来的长度就是数组长度。
在复制整型数组时,犯了以下错误:
int a[] = {0, 1, 2, 3, 4, 5, 6, 7};
int b[n];
memcpy(b, a, sizeof(a) / sizeof(a[0]));
下意识的用 sizeof(a) / sizeof(a[0]) 去计算数组长度,导致复制后,打印b数组时,只有b[0] 和b[1]被复制了,为什么呢?看一看memcpy的原理:
void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1
也就是说size_t n 是以字节为单位的,sizeof(a) / sizeof(a[0]) 得到 8, 是数组的长度,而不是数组所占的空间内存,这里只复制过去了 8 个字节,刚好就是两个int整型,即 a[0] 和 a[1] 被复制了,后面的元素没有被复制。
只需要 sizeof(a) 就够了:
int a[] = {0, 1, 2, 3, 4, 5, 6, 7};
int b[n];
memcpy(b, a, sizeof(a));
更多推荐
所有评论(0)