目录
前言
第一篇博客。
一、处理字符和字符串的库函数的使用和注意事项
1. 求字符串长度
strlen
-
查找 \0 之前有多少个字符,返回类型为 size_t = unsigned int
2. 长度不受限制的字符串函数(一定要找到 '\0')
strcpy:字符串拷贝
-
源字符串必须以 '\0' 结束
-
会将源字符串中的 '\0' 拷贝到目标空间
-
目标空间必须足够大,以确保能存放源字符串
-
目标空间必须可变
// char* strcpy(char* destination, const char* source);
// 自己模拟的库函数
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src);// 需引入#include <assert.h>
char* ret = dest;// 将目的空间的地址起始存入 ret
// 拷贝src指向的字符串到dest指向的空间,包含 '\0'
while (*dest++ = *src++)// 当拷贝到src = '\0'时,表达式判断为 0
{
;
}
// 返回目的空间的起始地址
return ret;
}
strcat:字符串追加
-
源字符串必须以 '\0' 结束
-
目标空间需要足够大,能容纳下源字符串的内容
-
目标空间必须可修改
// char* strcat(char* destination, const char* source);
char* my_strcat(char* dest, const char* src)
{
char* ret = dest; // 将目的空间的地址起始存入 ret
assert(dest != NULL);
assert(src);
// 1.找到目的字符串的 '\0'
while (*dest != '\0')
{
dest++;
}
// 2.追加
while (*dest++ = *src++)
{
;
}
return ret;
}
strcmp:比较字符串
-
第一个字符串大于第二个字符串,返回大于0的数字
-
第一个字符串等于第二个字符串,返回等于0的数字
-
第一个字符串小于第二个字符串,返回小于0的数字
// char* strcmp(const char* str1, const char* str2);
// 模拟实现库函数
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0') {// 相等的情况下
return 0;
}
str1++;
str2++;
}
return (*str1 - *str2);
}
长度受限制的字符串函数介绍
strncpy
代码如下(示例):
char* strncpy(char* destination, const char* source, size_t num);
-
从源字符串拷贝num个字节替换到目标空间
-
如果源字符串长度小于 num,则在拷贝完之后&