1.strlen
2.strcpy、strncpy
1. strlen 功能:求字符串长度-------> size_t strlen(const char* str)
注:函数的返回值是size_t是无符号类型(unsigned int);strlen找到'\0'就会停下来(不包括含'\0')。
strlen的模拟实现
//模拟实现strlen
//1.计数器的方式
//2.不能创建临时变量计数器 (递归)
//3.指针-指针方式
int my_strlen(const char* str)
{
assert(str);
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int my_strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int my_strlen1(char* str)
{
char* p = str;
while (*p)
{
p++;
}
return p - str;
}
int main()
{
char arr[10] = "abcdef";
int sz = 0;
sz = my_strlen1(arr);
printf("%d", sz);
return 0;
}
2. strcpy 功能:拷贝所有字符-------->char* strcpy(char* destination, const char* source)
注:char* destination为目的地址,char* source为源头字符串地址。在拷贝过去的时候,会将源字符串中的'\0'也一起拷贝到目标空间。源字符串必须以'\0'尾; 目标空间必须足够大;目标空间必须可变。
strcmp的模拟实现
//模拟实现strcpy(字符串拷贝)
char* my_strcpy(char* dest, const char* str)
{
assert(dest&&str);
char* ret = dest;
while (*dest++ = *str++) //拷贝src指向的字符串到dest指向的空间,包含'\0'。
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "world";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
strncpy 功能:拷贝num个字符---->char* strncpy(char* destination, const char* source,size_t num);
注:与strcpy不一样的地方是:strcpy是将整个字符串全部拷贝过去,而strncpy是可以指定多少个字符进行拷贝。如果源字符串长度小于num,则拷贝完源字符串之后,在目标的后面追加0,直到num个。