strcpy
char *strcpy(char *dest, const char *src);
// 返回 dest
会拷贝包括结尾的 \0
在内的字符
注:
- 如果
dest
长度不足,则情况是未知的 - 如果
src
的长度小于dest
,则dest
比src
多的部分不会被覆盖
安全版本 strncpy
字符串拷贝的安全版本,功能和 strcpy
相同
可以指定最多往 dest
中拷贝多少个字符
使用示例:
const char *src = "hello world";
char dest[6] = {'1', '2', '3', '4', '5', '6'};
std::strncpy(dest, src, 5);
// dest 中的内容为:['h', 'e', 'l', 'l', 'o', '6']
如果进行字符串的拷贝,记得确保 dest
的最后一位是 \0
注:
- 如果
dest
的长度小于cnt
,结果会是未知的 - 如果
src
的长度小于cnt
,不足的位回以\0
填充
memcpy
函数原型为:
void *memcpy(void *dest, void *src, size_t cnt);
// 返回值是 dest
这个函数的使用非常直观
memmove
函数原型为:
void *memmove(void *dest, void *src, size_t cnt);
// 返回 dest
将 src
中的内存拷贝到 dest
中,拷贝 cnt
bytes 的内存
这个函数允许 src
和 dest
内存交叠
使用示例:
char src[5] = {'1', '2', '3', '4', '5'};
memmove(src, src + 1, 2);
// src 中的内容为:['2', '3', '3', '4', '5']
memset
为一段内存填充内容
void *memset(void *dest, int ch, std::size_t count);
// 返回 dest
函数参数中的 ch
是整形类型,会将其转换为 unsigned char
类型,再填充到 dest
中
strcat
字符串拼接
函数原型为:
char *strcat(char *dest, const char *src);
// 返回 dest
注意不要超出 dest
的大小
注:
- 如果拼接完后,超出了
dest
的大小,则会发生截断,且无法保证dest
的最后一位是\0
安全版本 strncat
字符串拼接
strncat(char *dest, const char *src, size_t n);
注:
- 如果
src
的长度大于n
,则会发生截断; - 如果
dest
的空间不足,无法保证最后一位是\0
使用示例:
const char *src = "abc";
char dest[6] = {'1', '2', '3', '\0', '-', '-'};
strncat(dest, src, 2);
// dest 的内容为:['1', '2', '3', 'a', 'b', '\0']
strncat(dest, src, 2);
// dest 的内容为:['1', '2', '3', 'a', 'b', 'a']