头文件
#include <string.h>
字符串的特点
字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。
空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。
char site[7] = {'a', 'b', 'c', 'd', 'e', 'f', '\0'};
char site[] = "abcdef";
以上两种定义初始化等价。
字符串操作
计算字符串的长度
strlen()
函数原型
size_t strlen(const char *str)
功能特点
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
参考链接:https://www.runoob.com/cprogramming/c-function-strlen.html
字符串拷贝
strcpy()
函数原型
char *strcpy(char *dest, const char *src)
功能特点
把 src 所指向的字符串复制到 dest。该函数返回一个指向最终的目标字符串 dest 的指针
注意:如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况
参考链接:https://www.runoob.com/cprogramming/c-function-strcpy.html
strncpy()
函数原型
char *strncpy(char *dest, const char *src, size_t n)
功能特点
src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。该函数返回最终复制的字符串。
注意:strncpy 没有自动加上终止符的,需要手动加上。
参考链接:https://www.runoob.com/cprogramming/c-function-strncpy.html
字符串比较
strcmp()
函数原型
int strcmp(const char *str1, const char *str2)
功能特点
把str1 所指向的字符串和 str2 所指向的字符串进行比较。
返回值:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-strcmp.html
strncmp()
函数原型
int strncmp(const char *str1, const char *str2, size_t n)
功能特点
把 str1 和 str2 进行比较,最多比较前 n 个字节。
返回值
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-strncmp.html
字符串拼接
strcat()
函数原型
char *strcat(char *dest, const char *src)
功能特点
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.
注意:dest要有足够大的内存用来保存追加上来的src
参考链接:https://www.runoob.com/cprogramming/c-function-strcat.html
strncat()
函数原型
char *strncat(char *dest, const char *src, size_t n)
功能特点
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
注意:dest要有足够大的内存用来保存追加上来的src
参考链接:https://www.runoob.com/cprogramming/c-function-strncat.html
字符串分割
函数原型
char *strtok(char *str, const char *delim)
功能特点
分解字符串 str 为一组字符串,其中delim 为分隔符,包含分隔符的 C 字符串. str为要被分解成一组小字符串的字符串。
返回值
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
注意:当str被某一个字符串 如"/"分割时,aa/bb/cc 分割后会变为 aa’\0’bb’\0’cc 输出显示为aa bb cc
参考链接:
https://www.runoob.com/cprogramming/c-function-strtok.html
https://blog.csdn.net/Mylily_123/article/details/78208078
内存操作
内存拷贝
memcpy()
函数原型
void *memcpy(void *str1, const void *str2, size_t n)
功能特点
从存储区 str2 复制 n 个字节到存储区 str1。该函数返回一个指向最终的目标字符串 str1 的指针
注意:当内存发生局部重叠时,可能导致memcpy拷贝的结果是未定义的(取决于编译平台内部对memcpy的优化处理)
memcpy拷贝异常参考链接:https://blog.csdn.net/bajianxiaofendui/article/details/87083090
memcpy拷贝函数参考链接:https://www.runoob.com/cprogramming/c-function-memcpy.html
内存移动拷贝
memmove()
函数原型
void *memmove(void *str1, const void *str2, size_t n)
功能特点
从 str2 移动复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。str2是多少,str1就为多少。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同,为简单拷贝。
参考链接:https://www.runoob.com/cprogramming/c-function-memmove.html
内存比较
memcmp()
函数原型
int memcmp(const void *str1, const void *str2, size_t n)
功能特点
把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
返回值
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-memcmp.html
内存字符填充
memset()
函数原型
void *memset(void *str, int c, size_t n)
功能特点
复制单个字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。memset是按照字节的填充。
参考链接:https://www.runoob.com/cprogramming/c-function-memset.html