C中的可爱函数

记录一些可爱的C函数,例如很容易搞混的strcat、s_strcat~

字符串操作

输入

函数 标准 保留换行符 动态分配内存 说明
scanf N N 读取’\x00’不截断,但截断’\x09’, ‘\x0a’, ‘\x0b’, ‘\x0c’, ‘\x0d’, ‘\x20’
gets N N C11已弃用,极度危险,能读’\x00’
fgets C99 Y N 最多输入n-1个字符并添加结束符,性能不佳
getline TR 24731-2 Y N 传入堆空间,若输入超过指定长度则使用relloc调整大小,返回读到的字符数
gets_s C11 N N 最多输入n-1个字符并添加结束符,成功返回字符串地址,在遇到结束标志或者其他错误时返回NULL并设buf为空串、清除输入流直到下一个换行符
### 拼接
函数 标准 保证空字符结尾 可能截断 动态分配内存
strcat C99 N N N
strncat C99 N Y N
strlcat OpenBSD Y Y N
strcat_s C11 Y N N
strncat_s C11 Y N N
### 复制
函数 标准 保证空字符结尾 可能截断 动态分配内存
strcpy C99 N N N
strncpy C99 N Y N
strlcpy OpenBSD Y Y N
strdup TR24731-2 Y N Y
strndup TR24731-2 Y Y Y
strcpy_s C11 Y N N
strncpy_s C11 Y N N