模拟实现strncpy、strncat、strncmp,相比于strcpy、strcat、strcmp来说,strncpy、strncat、strncmp三个函数只是加了一个字母n来控制拷贝、连接、比较的个数
1、strncpy的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <assert.h>
char* my_strncpy(char* dest,const char* src,size_t num)
{
char* ret = dest;
assert(dest != null);
assert(src != null);
while (num&&(*dest++ = *src++))
{
num--;
}
if (num)
{
while (--num)
{
*dest++ = '\0';
}
}
return ret;
}
int main()
{
char str1[10] = "abcdef";
char str2[10] ={0};
my_strncpy(str2,str1,3);
printf("%s\n",str2);
return 0;
}
2.strncat的模拟实现
#include <stdio.h>
#include <assert.h>
char* my_strncat(char* dest,const char* src,size_t num)
{
char* ret = dest;
assert(dest != null);
assert(src != null);
while (*dest)
{
dest++;
}
while (num&&(*dest++ = *src++))
{
num--;
}
return ret;
}
int main()
{
char str1[10] = "abcdef";
char str2[10] = "ghc";
my_strncat(str1,str2,2);
printf("%s\n",str1);
return 0;
}
3、strncmp的模拟实现
#include <stdio.h>
#include <assert.h>
int my_strncmp(const char* str1,const char* str2,size_t num)
{
assert(str1 != NULL);
assert(str2 != NULL);
while(num--)
{
if (str1 != '\0'&&str2 != '\0'&&(*str2 == *str1))
{
*str1++;
*str2++;
}
else
{
return *str1 - *str2;
}
}
}
int main()
{
char str1[10] = "abcdef";
char str2[10] = "abcdg";
int ret = my_strncmp(str1,str2,5);
printf("%d\n",ret);
return 0;
}