1. strcpy
函数源码实现:
char *strcpy(char *dest, const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '\0');
return tmp;
}
功能:把 src所指向的字符串复制到 dest
参数:
- dest: 目标字符串首地址
- src: 源字符串首地址
返回值:返回指向目标字符串的首地址(指针)
注意事项:如果目标字符串dest长度小于源字符串src的长度,可能会造成缓冲区溢出
2. strncpy
函数源码实现:
char *strncpy(char *dest, const char *src, size_t n)
{
char *tmp = dest;
while (n) {
if ((*tmp = *src) != 0)
src++;
tmp++;
n--;
}
return dest;
}
功能:把 src所指向的字符串复制n个字符到目标字符串 dest
参数:
- dest: 目标字符串首地址
- src: 源字符串首地址
- count: 要从src源字符串复制n个字符
返回值:返回指向目标字符串的首地址(指针)
注意事项:
- src的长度小于n时,dest的剩余部分将用空字节填充
- src的长度大于n时,dest字符串不会有’\0’结束符
- n的大小应该小于源字符串和目标字符串的长度
3. strlen
函数源码实现:
size_t strlen(const char *str)
{
const char *sc;
for (sc = str; *sc != '\0'; sc++);
return sc - str;
}
功能:计算字符串str的长度,结果不包含字符串结束符’\0’
参数:
- str: 想要计算长度的字符串
返回值:返回该字符串的长度(不包含结束符)
4. strcat
函数源码实现:
char *strcat(char *dest, const char *src)
{
char *tmp = dest;
/* 找到目标字符串的结尾 */
while (*dest)
dest++;
/* 追加 */
while ((*dest++ = *src++) != '\0');
return tmp;
}
功能:将一个 ‘\0’ 终止的字符串src追加到另一个字符串dest的结尾处,其中src字符串的结束符’\0’也会追加上去
参数:
- dest: 目标字符串首地址
- src: 源字符串首地址
返回值:返回指向目标字符串的首地址(指针)
注意事项:
- 源字符串src必须以’\0’结束
- 目标字符串的内存空间必须足够容纳追加字符串
5. strncat
函数源码实现:
char *strncat(char *dest, const char *src, size_t n)
{
char *tmp = dest;
if (n) {
/* 找到目标字符串结尾 */
while (*dest)
dest++;
/* 从src字符串中追加n个字符到dest中 */
while ((*dest++ = *src++) != 0) {
/* n减小到等于0时,提前结束循环 */
if (--n == 0) {
*dest = '\0';
break;
}
}
}
return tmp;
}
功能:将src中开头的n个字符追加到dest的结尾。如果n大于src的长度,那么只会将src的所有字符追加到dest的尾部
参数:
- dest: 目标字符串首地址
- src: 源字符串首地址
- n: 想要追加多少个字符
返回值:返回指向目标字符串的首地址(指针)
注意事项:
- 目标字符串的内存空间必须足够容纳追加的字符数
6. strcmp
函数源码实现:
int strcmp(const char *str1, const char *str2)
{
while (1) {
if (*str1 != *str2)
return (*str1 - *str2);
if (!*str1)
break;
str1++;
str2++;
}
return 0;
}
功能:str1和str2两个字符串进行比较。
参数:
- str1: 要进行比较的第一个字符串
- str2: 要进行比较的第二个字符串
返回值:
- 如果返回值小于 0,则表示 str1 小于 str2
- 如果返回值大于 0,则表示 str1 大于 str2
- 如果返回值等于 0,则表示 str1 等于 str2
注意事项:
- str1、str2两个字符串比较时,只要判断到有一个字符不相等,就相当于他们是不同的字符串了,而且大小判断也是依据这个字符出的ASCII码的大小判断谁大谁小的。比如:"ab"和"aBCD"这两个字符串,因为第二个位置的字符’b’大于’B’所以是"ab"这个字符串大于"aBCD"这个字符串
7. strncmp
strncmp函数和strcmp函数用法是一样的,只不过strncmp函数指定了比较的最大字符数。
函数源码实现:
int strncmp(const char *str1, const char *str2, size_t n)
{
while (n) {
if (*str1 != *str2)
return (*str1 - *str2);
if (!*str1)
break;
str1++;
str2++;
n--;
}
return 0;
}
功能:str1和str2两个字符串进行比较,最多比较前n个字符。比较过程中,如果任何一个字符串的长度小于n,那么只会比较较短的字符串的长度。
参数:
- str1: 要进行比较的第一个字符串
- str2: 要进行比较的第二个字符串
- n: 要进行比较的最大字符数
返回值:
- 如果返回值小于 0,则表示 str1 小于 str2
- 如果返回值大于 0,则表示 str1 大于 str2
- 如果返回值等于 0,则表示 str1 等于 str2
8. strchr
函数源码实现:
char *strchr(const char *str, int c)
{
for (; *str != (char)c; str++)
{
if (*str == '\0')
return NULL;
}
return (char *)str;
}
功能:在字符串str中查找字符c首次出现的位置
参数:
- str: 要查找的字符串首地址
- c: 想要查找的匹配字符
返回值:
- 成功则返回第一次出现字符c的位置(或者说地址)
- 失败则返回NULL
9. strrchr
函数源码实现:
char *strrchr(const char *str, int c)
{
const char *last = NULL;
do {
if (*str == (char)c)
last = str;
} while (*str++);
return (char *)last;
}
功能:在字符串str中查找字符c最后一次出现的位置(或者说反向查找字符串str第一次出现字符c的位置)
参数:
- str: 要查找的字符串首地址
- c: 想要查找的匹配字符
返回值:
- 成功则返回最后一次出现字符c的位置(或者说地址)
- 失败则返回NULL
10. strstr
函数源码实现:
char *strstr(const char *haystack, const char *needle)
{
size_t l1, l2;
l2 = strlen(needle);
if (!l2)
return (char *)haystack;
l1 = strlen(haystack);
while (l1 >= l2) {
l1--;
if (!memcmp(haystack, needle, l2))
return (char *)haystack;
haystack++;
}
return NULL;
}
功能:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。比如在字符串"aaabcd123gggab123abcd"中查找"123"这个字符串,那么返回的就是"123"这个字符串,在字符串"aaabcd123gggab123abcd"中首次出现的位置(地址)。
参数:
- haystack : 要查找的源字符串首地址
- needle : 匹配的字符串首地址
返回值:
- 成功则返回最后一次出现字符串 needle 的位置(或者说地址)
- 失败则返回NULL
11. strpbrk
函数源码实现:
char *strpbrk(const char *str1, const char *str2)
{
const char *sc1, *sc2;
for (sc1 = str1; *sc1 != '\0'; sc1++) {
for (sc2 = str2; *sc2 != '\0'; sc2++) {
if (*sc1 == *sc2)
return (char *)sc1;
}
}
return NULL;
}
功能:搜索字符串str1中,第一个匹配字符串str2中的字符,然后返回该字符所在的位置,不包含字符串结束符。
参数:
- str1: 要检索的字符串
- str2: 给出想要在str1匹配的字符串
返回值:
- 成功,则返回str1第一个匹配的字符所在的位置。例如str1字符串"123ABCDEFG",str2为"CDE",那么检索后返回的就是字符串str1中字符’C’的位置(地址)
- 没有检索到匹配的字符,那么返回NULL
12. strreplace
函数源码实现:
char *strreplace(char *str, char old, char new)
{
char *tmp = str;
for (; *tmp; tmp++)
if (*tmp == old)
*tmp = new;
return str;
}
功能:使用新的字符new替换字符串中所有出现的old字符
参数:
- str: 要替换的字符串的首地址
- old: 想要替换字符串中出现的哪个字符
- new: 使用新的字符去替换old字符
返回值:返回传递进的str字符串的首地址