snprintf,strncpy 和 strncat

定义,用法啥的就懒得写了,只把三者比较绕、比较恶心人的地方总结一下。

snprintf

int snprintf(char *str, size_t cnt, const char *format, ...);
  • cnt 为欲复制的字符的个数,实际复制的字符个数取 cnt 和 format的 size 二者中较小的一个
  • 若 cnt 大于 format 的长度,那么只会把源串 format 全部复制。
  • 若 cnt 小于 format 的长度,那么会复制 cnt 个字符,若第 cnt 个字符不是 ’ \0 ‘ ,那么将第 cnt 个字符改为 ’ \0 ‘,再复制到目的串。
  • 返回值:成功时返回源串的长度(strlen,不包括 ’ \ 0 ’ ),失败则返回一个负数。

strncpy

char *strncpy(char *dest, const char *src, size_t cnt);
  • 从 src 源串复制 cnt 个字符到 dest 目的串,如果源串 src 的长度不够 cnt ,那么剩下的就用 NULL 来填充。(不保证 ’ \ 0 ‘ )

strncat

char *strncat(char *dest, const char *src, size_t n);
  • 若 cnt 大于 src 的长度,那么把 src 接到 dest 后面,总之以小的为准。另外,若 src 的末尾没有 ’ \ 0 ‘ ,
    那么还会额外在连接后的串尾添上一个 ’ \ 0 ',注意是额外,不会影响到 src,要小心 dest 是否因此而溢出。

猜你喜欢

转载自blog.csdn.net/engineer0/article/details/109681677