strcpy

  1. char *strcpy(char *dest, const char *src);
  2. // 返回 dest

会拷贝包括结尾的 \0 在内的字符
注:

  • 如果 dest 长度不足,则情况是未知的
  • 如果 src 的长度小于 dest,则 destsrc 多的部分不会被覆盖

安全版本 strncpy

字符串拷贝的安全版本,功能和 strcpy 相同
可以指定最多往 dest 中拷贝多少个字符
使用示例:

  1. const char *src = "hello world";
  2. char dest[6] = {'1', '2', '3', '4', '5', '6'};
  3. std::strncpy(dest, src, 5);
  4. // dest 中的内容为:['h', 'e', 'l', 'l', 'o', '6']

如果进行字符串的拷贝,记得确保 dest 的最后一位是 \0
注:

  • 如果 dest 的长度小于 cnt,结果会是未知的
  • 如果 src 的长度小于 cnt ,不足的位回以 \0 填充

memcpy

函数原型为:

  1. void *memcpy(void *dest, void *src, size_t cnt);
  2. // 返回值是 dest

这个函数的使用非常直观

memmove

函数原型为:

  1. void *memmove(void *dest, void *src, size_t cnt);
  2. // 返回 dest

src 中的内存拷贝到 dest 中,拷贝 cnt bytes 的内存
这个函数允许 srcdest 内存交叠

使用示例:

  1. char src[5] = {'1', '2', '3', '4', '5'};
  2. memmove(src, src + 1, 2);
  3. // src 中的内容为:['2', '3', '3', '4', '5']

memset

为一段内存填充内容

  1. void *memset(void *dest, int ch, std::size_t count);
  2. // 返回 dest

函数参数中的 ch 是整形类型,会将其转换为 unsigned char 类型,再填充到 dest

strcat

字符串拼接
函数原型为:

  1. char *strcat(char *dest, const char *src);
  2. // 返回 dest

注意不要超出 dest 的大小
注:

  • 如果拼接完后,超出了 dest 的大小,则会发生截断,且无法保证 dest 的最后一位是 \0

安全版本 strncat

字符串拼接

  1. strncat(char *dest, const char *src, size_t n);

注:

  • 如果 src 的长度大于 n ,则会发生截断;
  • 如果 dest 的空间不足,无法保证最后一位是 \0

使用示例:

  1. const char *src = "abc";
  2. char dest[6] = {'1', '2', '3', '\0', '-', '-'};
  3. strncat(dest, src, 2);
  4. // dest 的内容为:['1', '2', '3', 'a', 'b', '\0']
  5. strncat(dest, src, 2);
  6. // dest 的内容为:['1', '2', '3', 'a', 'b', 'a']