1.strncpy
#include "stdio.h"
#include "assert.h"
#include"windows.h"
#include "string.h"
char * my_strncpy(char *dst, const char *src,size_t num)
{
char *tmp = dst;
assert(dst != NULL);
assert(src != NULL);
while ((*dst++ = *src++)&&num)
{
num--;
}//保证源字符串不为空时,不会以NULL结束
if (num)//当src的长度小于num
{
while (--num)//会对num影响
{
*(dst++) = "\0"; }
}
return tmp;
}
int main()
{
char arr1[40];
char arr2[] = "happy";
int len = sizeof(arr2);
printf("%s\n", my_strncpy(arr1, arr2, len));
system("pause");
return 0;
}
2.strncat
#include "stdio.h"
#include "assert.h"
#include"windows.h"
#include "string.h"
//前字符串与后字符串连接时不连接\0,在连接完之后添加
char * my_strncat(char *dst, const char *src,size_t num)
{
char *tmp = dst;//定义tmp指针指向char型dst指针
assert(dst != NULL);
assert(src != NULL);
while (*dst)
{
dst++;
}//先打印前字符串中的字符
while ((*dst++ = *src++) && num)//连接第一个与第二个字符串
{
num--;
}
*dst = '\0';//不连接\0,所以要添上\0;
return tmp;
}
int main()
{
char arr1[] = "haha";
char arr2[] = "to be or not";
printf("%s\n", my_strncat(arr1, arr2,5));
system("pause");
return 0;
}
3.strncmp
先从第一个开始比较,
当遇到与另一个不一样;
或者其中一个字符串结束; / /则相同
或者num个字符都比较完,还没有出现字符串结束; //前者大于后者
#include "stdio.h"
#include "assert.h"
#include"string.h"
#include "windows.h"
int * my_strncmp( const char *str1, const char *str2,size_t num)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (num--)
{
if (*str1++ == *str2++)//将num个字符比完
{
if (*str1 == '\0')//其中一个字符串结束
return 0;//则说明相同
}
}
return *str1 - *str2;//num个字符串已经比完,字符串还没有结束,则说明前者大
}
int main()
{
char arr[][7] = { "hahaha", "hehehe", "hahahe"};
int i = 0;
for (i = 0; i < 3; i++)
{
if (my_strncmp(arr[i], "hahaxx", 4) == 0)
{
printf("%s\n", arr[i]);
}
}
system("pause");
return 0;
}