自定义函数模拟实现库函数strncpy、strncat和strncmp的功能

您所在的位置:网站首页 c语言自定义函数定义 自定义函数模拟实现库函数strncpy、strncat和strncmp的功能

自定义函数模拟实现库函数strncpy、strncat和strncmp的功能

2024-03-16 14:49| 来源: 网络整理| 查看: 265

以下内容是接着上一篇所写(如何让处理C语言的字符和字符串:函数_昵称就是昵称吧的博客-CSDN博客),可以先浏览上一篇,可以更好的理解下面的内容。

库函数:

strcpy

strcat

strcmp

——————————是长度不受限制的字符串函数

strncpy

strncat

strncmp

——————————是长度受限制的字符串函数

目录

一、限制长度的字符串拷贝函数

strncpy

二、限制长度的字符串追加函数

strncat

 三、限制长度的字符串比较函数

 strncmp

一、限制长度的字符串拷贝函数 strncpy

 从函数的申明可以得出,比起库函数strcpy就多了一个限制条件:需要拷贝字符的个数。

函数strncpy功能原理和函数strcpy基本一致。多了以下两点:

第一点:拷贝的num个字符从源空间到目标空间。

第二点:如果源空间里的字符串长度小于num,则拷贝完源空间里的字符串之后,在目标空间追加0,直到num个。

后面我们根据这两点来自定义函数实现对应的功能。

自定义函数模拟实现库函数strncpy的功能: 

#include #include 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; }

 可以看出和库函数strncpy的功能一致,重点是在于限制拷贝的字符个数和已经拷贝的字符个数的关系。

二、限制长度的字符串追加函数 strncat

 从函数的申明可以得出,比起库函数strcat就多了一个限制条件:需要追加字符的个数。

函数strncpy功能原理和函数strcpy基本一致。多了以下两点:

第一点:追加的num个字符从源空间到目标空间。

第二点:如果追加的字符个数num小于源空间里的字符个数,则追加完源空间里的字符之后,还需要在目标空间追加一个 '\0' 。

后面我们根据这两点来自定义函数实现对应的功能。

 自定义函数模拟实现库函数strncat的功能: 

#include 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; }

  可以看出和库函数strncat的功能一致,重点是在于限制追加的字符个数和已经追加的字符个数的关系。

 三、限制长度的字符串比较函数  strncmp

 从函数的申明可以得出,比起库函数strcmp就多了一个限制条件:需要比较字符的个数。

函数strncpy功能原理和函数strcpy基本一致。

 自定义函数模拟实现库函数strncmp的功能: 

#include 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3