目录
一、限制长度的字符串拷贝函数
strncpy
自定义函数模拟实现库函数strncpy的功能:
#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* src, size_t num)
{
int n = 0;
char* p = dest;
assert(dest && src);//断言函数,防止传递空指针
while (*src != '\0')
{
*dest++ = *src++;
n++;
if (n == num)//已经拷贝字符的个数等于限制的个数,跳出循环
{
break;
}
}
if (*src == '\0')//判断是否将src指向的字符串里的所有内容拷贝过去
*dest = *src;
if (*src != '\0')
*dest = '\0';
return p;
}
int main()
{
char arr[] = "*****************";
char* p = "abcdefg";
int num = 0;
printf("需要拷贝的字符个数:");
scanf("%d", &num);
fprintf(stdout, "拷贝后的字符串:%s", my_strncpy(arr, p, num));
return 0;
}
二、限制长度的字符串追加函数
strncat
自定义函数模拟实现库函数strncat的功能:
#include<stdio.h>
char* my_strncat(char* dest, const char* src, size_t num)
{
int n = 0;
char* p = dest;
while (*dest != '\0')//先找到目标空间里的 '\0'
{
dest++;
}
while (*src != '\0')
{
*dest++ = *src++;
n++;
if (n == num)//已经追加的字符的个数等于限制的个数,跳出循环
break;
}
if (*src == '\0')//判断是否将src指向的字符串里的所有内容追加过去
*dest = *src;
if (*src != '\0')
*dest = '\0';
return p;
}
int main()
{
char arr[20] = "abcdefg";
char* p = "hijklm";
int num = 0;
printf("需要追加的字符个数:");
scanf("%d", &num);
char* ret = my_strncat(arr, p, num);
fprintf(stdout, "追加后的字符串:%s", ret);
return 0;
}
三、限制长度的字符串比较函数
strncmp
自定义函数模拟实现库函数strncmp的功能:
#include<stdio.h>
int my_strncmp(const char* str1, const char* str2, size_t num)
{
int n = 1;
while (*str1 == *str2)
{
if (*str1 == 0||n == num)//1、当全部字符比较完或2、比较的字符个数等于限制的个数
{
return 0;
}
str1++;
str2++;
n++;
}
if (*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
char* p1 = "abcdef";
char arr[] = "abcdfhj";
int num = 0;
printf("需要比较的字符个数:");
fscanf(stdin,"%d", &num);
int ret = my_strncmp(p1, arr,num);
if (ret > 0)
{
printf("p1>arr");
}
else if (ret < 0)
{
printf("p1<arr");
}
else
{
printf("p1=arr");
}
return 0;
}