一:模拟实现strncpy
库函数中的strncpy的参数:
char *strncpy(char *strDest, const char *strSource, size_t count)
strncpy 可以将源字符串内容 拷贝到 目标字符串里,拷贝的元素个数可以自己规定。
示例:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "hello world";
char arr2[20] = "funny";
strncpy(arr1, arr2, 3); // 会覆盖,但是后面的内容会继续打出来 结果funlo world
//strncpy(arr1, arr2, 8); // arr2 中的拷贝元素个数 超过 实际存在的个数 会把arr2中的 \0 拷贝进去 arr1 并且停止 结果是 funny
printf("%s\n", arr1);
system("pause");
return;
}
模拟实现strncpy 代码为:
#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncpy(char *dest,const char *src, int count)
{
assert(src && dest);
char * tmp = dest;
while (*src != '\0'&& count != 0)
{
*dest = *src;
count--;
dest++;
src++;
}
//跳出循环
if (count > 0) // *src==0
{
*dest = '\0';
}
//else if (count == 0) // count==0,把要拷贝的个数全部拷贝完了
//{
// ;
//}
return tmp;
}
int main()
{
char arr1[20] = "hello world";
char arr2[20] = "funny";
my_strncpy(arr1, arr2, 3);
my_strncpy(arr1, arr2, 8);
printf("%s\n", arr1);
system("pause");
return;
}
结果:
1.my_strncpy(arr1, arr2, 3); //拷贝3个字符
2.my_strncpy(arr1, arr2, 8); //拷贝8个字符
二:模拟实现strncat
库函数中的strncat的参数:
char *strncat(char *strDest, const char *strSource, size_t count)
strncat函数可以将 源字符串中 count 个字符 追加到目标字符串后面。
示例:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "hello ";
char arr2[20] = "sanzi";
strncat(arr1, arr2, 3); //结果是 hello san
strncat(arr1, arr2, 6); // 结果是 hello sanzi
printf("%s\n", arr1);
system("pause");
return;
}
模拟实现strncat 代码为:
#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncat(char *dest, const char *str, size_t count)
{
assert(dest && str); //断言,不能指针不能为空
char *tmp = dest;
int len = strlen(dest);
dest = dest + len ; //要在目标字符串的后面追加字符,所以指针定位在 目标字符串的后面的一个位置,所以不用-1
while (count--)
{
*dest = *str;
str++;
dest++;
}
return tmp;
}
int main()
{
char arr1[20] = "hello ";
char arr2[20] = "sanzi";
my_strncat(arr1, arr2, 3);
printf("%s\n", arr1);
system("pause");
return;
}
结果:
三:模拟实现strncmp
库函数中的strncat的参数:
int strncmp(const char *string1, const char *string2, size_t count)
strncmp 可以比较两个字符串的大小,比较的内容是字符串 前count个字符。
如果前者大,返回值为正数;如果后者大,返回值为负数;如果二者一样大,返回值为0;
示例:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "abcdef ";
char arr2[20] = "addd";
int ret = strncmp(arr1, arr2, 4);
printf("%d\n", ret); // 返回值是正数1,库函数默认值为1
system("pause");
return;
}
模拟实现strncmp 代码为:
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strncmp(const char *str1, const char *str2, size_t count)
{
assert(str1 && str2);
while (count--)
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else
break;
}
return *str1 - *str2;
}
int main()
{
char arr1[20] = "abcdef ";
char arr2[20] = "abhehe ";
char arr3[20] = "hahah";
char arr4[20] = "abcdef";
my_strncmp(arr1, arr2, 3);
int ret = my_strncmp(arr1, arr2, 4);
printf("%d\n", ret);
system("pause");
return;
}
结果:
1. char arr2[20] = “abhehe “;
2.char arr3[20] = “hahah”;
3.char arr4[20] = “abcdef”;