char* strcpy(char * destination, const char * source );
使用注意事项:
• 源字符串必须以 '\0' 结束。 • 会将源字符串中的 '\0' 拷贝到目标空间。 • 目标空间必须足够大,以确保能存放源字符串。 • 目标空间必须可修改。
#include <stdio.h>
#include <string.h>
int main()
{
char dest[10];
const char *src = "hello";
strcpy(dest, src);
printf("复制的字符串:'%s'\n", dest);
return 0;
}
模拟实现:
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}
strcpy 不检查目标缓冲区的大小,因此如果目标缓冲区不够大,可能会导致缓冲区溢出,这是一个严重的安全风险。建议使用 strncpy并指定最大复制长度,以避免这种风险。
char * strncpy ( char * destination, const char * source, size_t num );
使用注意事项:
拷贝num个字符从源字符串到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
#include <stdio.h>
#include <string.h>
int main()
{
char dest[10];
const char *src = "hello world";
strncpy(dest, src, 5);
dest[5] = '\0'; // 注意:必须手动添加终止空字符
// 现在 dest 是 "hello"
return 0;
}
模拟实现
char *my_strncpy(char *dest, const char *src, size_t n) {
char *dest_save = dest;
while (n && *src) {
*dest++ = *src++;
n--;
}
while (n--) {
*dest++ = '\0'; // 如果 n 大于 src 字符串的长度,填充剩余位置为空字符
}
return dest_save;
}