使用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));

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐