①模拟实现strncpy
函数作用:拷贝count个字符从源字符串到目标空间
如果源字符串的长度小于count,则拷贝完源字符串之后,在目标的后边追加null,直到count个
参考代码:
#include<stdio.h>
#include<assert.h>
char *my_strncpy(char *dest, const char *src,int count)
{
assert(dest != NULL);
assert(src != NULL);
char *ret = dest;
while (count && (*dest++ = *src++))
{
count--;
}
if (count > 0)
{
while (count--)
{
dest = NULL;
}
}//源字符串小于count,在后边追加NULL
return ret;
}
int main()
{
char str1[10] = { 0 };
char *str2 = "abcdef";
char *ret = my_strncpy(str1, str2, strlen(str2));
printf("%s\n", ret);
return 0;
}
②模拟实现strncat
参考代码:
#include<stdio.h>
#include<assert.h>
char *my_strncat(char *dest, const char *src, int count)
{
assert(dest != NULL);
assert(src != NULL);
char *ret = dest;
while (*dest)
{
dest++;
}//找到目标字符串的'\0',开始拷贝
while (count && (*dest++ = *src++))
{
count--;
}
dest = '\0';
//拷贝完之后自动不上'\0'
return ret;
}
int main()
{
char str1[20] = "hello";
char *str2 = " world";
char *ret = my_strncat(str1, str2, strlen(str2));
printf("%s\n", ret);
return 0;
}
③模拟实现strncmp
参考代码:
#include<stdio.h>
#include<assert.h>
int my_strncmp(const char *dest, const char*src, int count)
{
assert(dest != NULL);
assert(src != NULL);
while (count && (*dest ==*src))
{
if (*dest == '\0')
{
return 0;
}
dest++;
src++;
count--;
}
return *dest - *src;
}
int main()
{
int ret = 0;
const char *str1 = "abcdt";
const char *str2 = "cdefu";
ret = my_strncmp(str1, str2, 4);
if (0 == ret)
{
printf("str1=str2\n");
}
else if (ret > 0)
{
printf("str1>str2");
}
else
{
printf("str1<str2");
}
return 0;
}