一、 strcpy 和memcpy 区别
strcpy 和 memcpy 都是浅拷贝操作,它们只是简单地将源数据复制到目标位置,而不会复制源数据所指向的内容。具体来说:
-
strcpy会复制源字符串的内容直到遇到null终止符,并将其复制到目标字符串中。但是它不会复制源字符串指针所指向的内存,因此如果源字符串是指向动态分配内存的指针,只会复制指针值而不会复制其指向的内存块。这就是所谓的浅拷贝。 -
memcpy会复制指定长度的内存块,但它对数据的内容一无所知,只是简单地按字节复制。因此,如果源数据包含指针或其他引用,memcpy也只是简单地复制这些指针的值,而不会复制它们所引用的内存。这也是浅拷贝的一种形式。
要实现深拷贝,你需要自己处理内存分配和数据复制。对于字符串,你可以使用 strdup 函数来复制字符串并分配新的内存空间。对于复杂的数据结构,你可能需要编写自定义的复制函数来递归地复制所有内容。

char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{
if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
{
return NULL;
}
char *strdest = dest; //保存目标字符串的首地

本文详细比较了strcpy和memcpy在浅拷贝操作中的行为,强调了它们在处理字符串和内存引用时的不同。同时介绍了如何进行深拷贝以及如何在C++中实现字符串和字符数组之间的转换。

8744

被折叠的 条评论
为什么被折叠?



