1.strlen:
strlen - C++ Reference
strlen 函数是一个标准库函数,用于计算以 null 结尾的字符串的长度,也就是字符串中实际字符的数量,不包括最后的 null 终止符 \0。它定义在 <string.h> 头文件中。
函数原型:size_t strlen(const char *str);
参数:str:指向以 null 结尾的字符串的指针。
返回值:返回一个 size_t 类型的值,表示字符串 str 中的字符数,不包括结尾的 null 字符。
使用示例:

模拟其实现代码如下:
size_t my_strlen1(const char *str) {int count = 0;assert(str != NULL);while (*str++) {count++;}return count;
}
size_t my_strlen2(const char* str) {assert(str != NULL);if (*str != '\0') {return 1 + my_strlen2(str+1);}else {return 0;}
}
size_t my_strlen3(const char* str) {assert(str != NULL);char* start = str;while (*str) {str++;}return str - start;
}
2.strcpy
strcpy - C++ Reference
函数原型:char *strcpy(char *dest, const char *src);
参数:dest:目标字符串的指针,它是一个指向足够大的字符数组或者字符指针,用于存储复制后的字符串。src:源字符串的指针,是一个指向以 null 结尾的字符串的指针,将被复制到目标字符串中。
返回值:返回指向目标字符串 dest 的指针,即复制后的字符串的起始地址。
使用示例:

模拟其实现代码如下:
char* my_strcpy(char* dest, const char* str) {char* ret = dest;assert(str && dest);while (*dest++ = *str++) {;}return ret;
}
注意事项:
-
目标字符串必须足够大:
dest指向的内存空间必须足够大,能够容纳src指向的字符串及其结尾的 null 字符。否则可能会导致缓冲区溢出,产生未定义的行为。 -
null 结尾符:
strcpy函数会复制src指向的字符串直到遇到 null 结尾符为止。因此,复制的结果将会包括 null 结尾符。 -
安全性:使用
strcpy函数时,应确保src指向的字符串确实以 null 结尾,否则可能会导致未定义的行为。
3.strcat
strcat - C++ Reference
strcat 函数用于将一个字符串追加到另一个字符串的末尾。它同样定义在 <string.h> 头文件中。
函数原型:char *strcat(char *dest, const char *src);
参数dest:目标字符串的指针,是一个以 null 结尾的字符数组或者字符指针,将被用作目标。
src:源字符串的指针,是一个以 null 结尾的字符数组或者字符指针,将被追加到目标字符串的末尾。
返回值:返回指向目标字符串 dest 的指针,即追加后的字符串的起始地址。
使用示例:

模拟其实现代码如下:
char* my_strcat(char* dest, const char* str) {assert(str&&dest);char* ret = dest;while (*dest) {dest++;}while (*dest++=*str++) {;}return ret;
}
注意事项
-
目标字符串必须足够大:与
strcpy类似,dest指向的内存空间必须足够大,能够容纳src指向的字符串及其结尾的 null 字符。否则可能会导致缓冲区溢出,产生未定义的行为。 -
null 结尾符:
strcat函数会在目标字符串dest的结尾 null 字符的位置开始追加src指向的字符串。因此,追加后的结果仍然以 null 结尾。 -
安全性:使用
strcat函数时,应确保dest指向的目标字符串足够大,且确保src指向的字符串以 null 结尾
4.strcmp
strcmp - C++ Reference
strcmp 函数是用于比较两个字符串的内容是否相同。它同样定义在 <string.h> 头文件中。
函数原型:int strcmp(const char *str1, const char *str2);
参数:str1:要比较的第一个字符串的指针。str2:要比较的第二个字符串的指针。
返回值:如果 str1 和 str2 的内容相同,则返回值为 0。如果 str1 的内容大于 str2 的内容,则返回正值。如果 str1 的内容小于 str2 的内容,则返回负值。
使用示例:

模拟其实现代码如下:
int my_strcmp(const char* str1, const char* str2) {assert(str1 && str2);while (*str1 == *str2) {str1++;str2++;}if (*str1 == "\0") {return 0;}return *str1 - *str2;
}
注意事项
-
null 结尾符:
strcmp函数会比较str1和str2指向的字符串,直到遇到 null 结尾符为止。 -
大小写敏感:
strcmp是区分大小写的,即大写字母和小写字母被视为不同的字符。 -
安全性:使用
strcmp函数时,应确保str1和str2都是以 null 结尾的有效字符串,否则可能会导致未定义的行为。
5.strstr
strstr - C++ Reference
strstr 函数用于在一个字符串中搜索指定子字符串的第一次出现,并返回一个指向该子字符串的指针。它同样定义在 <string.h> 头文件中。
函数原型:char *strstr(const char *haystack, const char *needle);
参数:haystack:要搜索的主字符串,即被搜索的字符串。needle:要查找的子字符串,即要搜索的目标字符串。
返回值:如果 needle 存在于 haystack 中,则返回一个指向 needle 在 haystack 中第一次出现的位置的指针。如果 needle 不存在于 haystack 中,则返回 NULL。
使用示例:

模拟其实现代码如下:
char* my_strstr(const char*str1, const char* str2) {assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;const char* p = str1;while(*p){s1 = p;s2 = str2;while (*s1 == *s2 && str1!='\0' && str2!='\0') {s1++;s2++;} if (*s2 == '\0') {return p;}p++;}return NULL;
}
注意事项
-
大小写敏感:
strstr函数是区分大小写的,即大写字母和小写字母被视为不同的字符。 -
空字符串:如果
needle是一个空字符串 (""),则strstr函数将返回haystack的起始地址,因为任何字符串都包含空字符串。 -
安全性:确保
haystack和needle都是以 null 结尾的有效字符串。