目录
strncmp模拟实现
第⼀个字符串⼤于第⼆个字符串,则返回大于0的数字;
◦ 第⼀个字符串等于第⼆个字符串,则返回0;
◦ 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字;
int my_strcmp(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
while (*arr1 == *arr2)// 让两个字符比较
{
if (*arr1 == '\0' && *arr2 == '\0')//如果两个数组全部相同,就返回0
{
return 0;
}
//比较完一个字符就下一对
arr1++;
arr2++;
}
//直接返回两个字符的差
return *arr1 - *arr2;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "abce";
int ret = my_strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}
strncpy模拟实现
源字符串必须以 '\0' 结束。
1.会将源字符串中的 '\0' 拷⻉到⽬标空间。
2.⽬标空间必须⾜够⼤,以确保能存放源字符串。
3.⽬标空间必须可修改
char* my_strncpy(char* dest, const char* sourse, size_t n)
{
int i = 0;
char* ret = dest;//保留一份首地址
for (i = 0; i < n; i++)//把arr1的内容放在arr2
{
dest[i] = sourse[i];
}
dest[n] = '\0';//自己加上‘\0’,防止读取时越界,不过原本编译器的strncpy不会加‘\0’
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20];
char* ret = my_strncpy(arr2, arr1, 5);//arr2是目标数组,可以修改,足够大
printf("%s ", ret);
return 0;
}
strncat 模拟实现
• 源字符串必须以 '\0' 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容
char* my_strncat(char* dest, const char* sourse, size_t n)
{
char* p = dest;//用来保存dest的首地址
while (*dest)dest++;//遇到‘\0’停下来
for (int i = 0; i < n; i++)//再‘\0’处加字符
{
*dest = *sourse;
p++;
sourse++;
}
return p;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
my_strncat(arr1, arr2, 5);
printf("%s ", arr1);
return 0;
}