strncpy、strncat、strncmp函数与strcpy、strcat、strcmp函数非常相近,在实现功能上也十分接近。
但是在“str…”函数里,它是用自身的字符数组长度来判断循坏的停止条件,在一些情况下这是不安全的,比如在strcat函数,我们给arr追加arr时,程序就会崩溃。所以,用自身的长度来作为循环停止条件是不安全的。
所以我们引入“strn…”函数
模拟实现strncpy
#include <stdio.h>
#include <assert.h>
char *my_strncpy(char *dest, const char* src, int sz)
{
assert(dest&&src);
int i = 0;
char *ret = dest;
while (i < sz)
{
*dest++ = *src++;
i++;
}
return ret;
}
int main()
{
char arr[40] = { 0 };
my_strncpy(arr, "hello world", 4);
printf("%s\n", arr);
system("pause");
return 0;
}
模拟实现strncat
#include <stdio.h>
#include <assert.h>
char * my_strncat(char *dest, const char *src,int sz)
{
char* ret = dest;
while (*dest)
{
dest++;
}
while (sz && *src)
{
*dest++ = *src++;
sz--;
}
return ret;
}
int main()
{
char arr[20] = "hello";
my_strncat(arr, " world", 6);
printf("%s\n", arr);
system("pause");
return 0;
}
模拟实现strncmp
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char my_strncmp(const char *dest, const char *src, int sz)
{
assert(dest && src);
while (sz--)
{
if (*dest == *src)
{
dest++;
src++;
}
else
{
if ((*dest) - (*src) < 0)
return -1;
else
return 1;
}
}
return 0;
}
int main()
{
int num = my_strncmp("abcdr", "abcde", 5);
printf("%d\n", num);
system("pause");
return 0;
}