首先先给出函数的测试部分:
int main() { int k=0; char *ret=NULL; int len=0; char arr1[30]="i love you "; char arr2[]="china"; len=strlen(arr2); printf("请输入你要连接的字符个数:"); scanf("%d",&k); if(k<=len) { ret=my_strncat(arr1,arr2,k); } printf("%s\n",ret); system("pause"); return 0; }
所谓受限制的字符串连接函数就是可以按照设计者的意愿进行字符串连接,同时它也有一个比没有限制的字符串连接函数_srtcat多了一个特性就是可以自己连接自己。
下面我们来看受限制的字符串连接函数_strncat的模拟实现
char *my_strncat(char * dest,char *src,int len) { char *str1=dest; char *str2=src; assert(dest); assert(src); while(*str1 != '\0') //到str1的末位置 { str1++; } while(len>0 &&(*str2 != '\0')) //,len控制复制字符的个数,复制str2到str1 { *str1++=*str2++; len--; } *str1='\0'; //后面补'\0' return dest; }
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> int my_strncmp(const char *dest,const char*src,int k) { assert(dest); assert(src); while(k>0 && (*dest == *src)) { if(*dest == '\0') return 0; dest++; src++; k--; } return *dest-*src; } int main() { int k=0; int ret=0; char arr1[]="abcdef"; char arr2[]="xbcdef"; printf("请输入你要比较的位数:"); scanf("%d",&k); ret=my_strncmp(arr1,arr2,k); if(ret == 0) { printf("%s等于%s\n",arr1,arr2); } else if(ret > 0) { printf("%s大于%s\n",arr1,arr2); } else { printf("%s小于%s\n",arr1,arr2); } system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> char *my_strncpy(char *dest,char *src,int k) { char *tmp=dest; assert(dest); assert(src); while(k--) { *dest++=*src++; } *dest='\0'; return tmp; } int main() { char *ret=NULL; int k=0; char arr1[20]; char arr2[]="i love you"; printf("请输入你要拷贝的字符的个数:"); scanf("%d",&k); ret=my_strncpy(arr1,arr2,k); printf("%s\n",ret); system("pause"); return 0; }
通过模拟实现受限制的字符串连接函数_strncat,受限制的字符串比较函数_strncmp和受限制的字符串复制函数_strncpy,使我更好的理解了字符串的这三种函数和受限制的区别。我觉得受限制就是说明该函数存在可以按照程序设计者的喜好来操作函数-控制字符的个数。