- 使用
strcpy
复制字符串:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dst[20];
strcpy(dst, src);
printf("Copied string using strcpy: %s\n", dst);
return 0;
}
- 使用
memcpy
复制字符串:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dst[20];
size_t len = strlen(src) + 1;
memcpy(dst, src, len);
printf("Copied string using memcpy: %s\n", dst);
return 0;
}
- 功能差异:
strcpy
:专门用于复制以null
结尾的字符串。它会从源字符串的起始位置开始,逐个字符地复制,直到遇到null
字符('\0'
),并将null
字符也复制到目标字符串中。
memcpy
:更通用,用于复制一段内存区域。在复制字符串时,需要手动计算源字符串的长度(包括null
字符)并作为参数传递,它不会自动识别null
字符来停止复制,只是按照指定的字节数进行复制。
- 安全性差异:
strcpy
:不安全。如果目标缓冲区dst
的大小不足以容纳源字符串(包括null
字符),strcpy
会导致缓冲区溢出,从而引发未定义行为,可能导致程序崩溃或安全漏洞,如缓冲区溢出攻击。
memcpy
:相对安全一些,但前提是调用者正确计算了要复制的字节数。如果传递给memcpy
的长度参数过大,同样可能导致缓冲区溢出。不过,只要长度计算正确,它不会像strcpy
那样盲目复制而不考虑目标缓冲区大小。