strlen
对于strlen的模拟实现:
size_t
strlen
(
const char
* str );
strlen的使用:
字符串以
'\0'
作为结束标志,strlen函数返回的是在字符串中
'\0'
前⾯出现的字符个数(不包
含
'\0'
)。
参数指向的字符串必须要以 '\0' 结束。
注意函数的返回值为size_t,是⽆符号的( 易错 )。
int
my_strlen
(
char
*str)
{
assert(str); //判断指针 str 的有效性
int cost=0; //定义一个int类型的cost变量来记录字符的个数
while
(*str != ‘\
0
’ ) //使用while循环,判断条件为*str!=‘\0’;
{
cost++; //当*str不为‘\0’时,cost++
str++; //指针指向下一个位置
}
return
cost; //返回cost(字符的个数)
}
strcpy
对于strcpy的模拟实现:
char
*
strcpy
(
char
* destination,
const char
* source );
strcpy的使用:
•
源字符串必须以
'\0'
结束。
•
会将源字符串中的
'\0'
拷⻉到⽬标空间。
•
⽬标空间必须⾜够⼤,以确保能存放源字符串。
•
⽬标空间必须可变。
char
*
my_strcpy
(
char
*dest,
const char
*src)
{
char
*ret = dest; //创建一个指针指向dest
assert(dest !=
NULL
); //判断dest的有效性
assert(src !=
NULL
); //判断src的有效性
while
((*dest++ = *src++)) //while循环与判断条件
{ //使*dest==*src;然后指针同时指向下一个位置
; //当src==\0 时,退出循环。
}
return
ret; //返回ret指针
}
strcat
对于strcat的模拟实现:
char
*
strcat
(
char
*dest,
const char
*src);
•
源字符串必须以
'\0'
结束。
•
⽬标字符串中也得有
\0
,否则没办法知道追加从哪⾥开始。
•
⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
•
⽬标空间必须可修改。
char
*
my_strcat
(
char
*dest,
const char
*src)
{
char
*ret = dest; //创建一个指针指向dest
assert(dest !=
NULL
); //判断dest的有效性
assert(src !=
NULL
); //判断src的有效性
while
(*dest) //使用循环使*dest指向字符串的末尾‘\0’
{
dest++;
}
while
((*dest++ = *src++)) //while循环与判断条件
{ //使*dest==*src;然后指针同时指向下一个位置
;
}
return
ret; //返回ret指针
}