续:有限制的字符串函数

发布时间:2026/10/22 19:10:51
续:有限制的字符串函数 上期博客我们主要介绍了字符串函数其中实现两个字符串比较的是 strcmp()实现两个字符串拼接的是 strcat()实现字符串拷贝的是 strcpy()。在本期博客中我们会介绍这三个函数的有限制版本函数名功能描述strncmp比较两个字符串的前 n 个字符strncat拼接两个字符串最多追加 n 个字符strncpy拷贝字符串最多拷贝 n 个字符在介绍它们自身使用的同时也会介绍它们的模拟实现。1.strncmp——比较有限个字符参数int strncmp(const char* str1, const char* str2, size_t num);比较方法以此比较 str1 和 str2 的前 num 个字符按照 ASCII 码进行比较返回值比较结果返回值str1 的前 num 个字符小于 str2 的前 num 个字符 0str1 的前 num 个字符 str2 的前 num 个字符0str1 的前 num 个字符大于 str2 的前 num 个字符 0使用#includestring.hintmain(){chararr1[]abcdg;chararr2[]abcef;intrstrncmp(arr1,arr2,3);printf(比较前三个字符的结果为%d\n,r);intpstrncmp(arr1,arr2,4);printf(比较前四个字符的结果为%d\n,p);return0;}结果模拟实现#includeassert.hintmy_strncmp(constchar*str1,constchar*str2,size_tnum){assert(str1str2);while(*str1*str2*str1!\0*str2!\0num0){str1;str2;num--;}if(num0){return0;}return*str1-*str2;}intmain(){chararr1[]abcdg;chararr2[]abcef;intrmy_strncmp(arr1,arr2,5);if(r0){printf(arr1arr2);}elseif(r0){printf(arr1arr2);}elseif(r0){printf(arr1arr2);}return0;}与strcmp的模拟实现一样只不过需要多加考虑限制条件当num0时str1 str2的每一个字符都已经比较完成了这意味它们两个字符串相等。当num0且str1 str2没有比到\0时可以开始逐个字符进行比较,相等时开始比较下一个字符直到比较完了或者是不满足循环条件。2.strncat——拼接num个字符到目标字符串的后面参数char* strncat(chardest,const charsour,size_t num)返回值返回目标字符串的首地址使用将arr2字符串的前两个字符追加到arr1的后面intmain(){chararr1[20]abcdef;chararr2[]qqqqq;strncat(arr1,arr2,2);printf(%s\n,arr1);return0;}模拟实现#includeassert.hchar*my_strncat(char*dest,constchar*sour,size_tnum){char*retdest;assert(*dest*sour);//先找到目标字符串的尾部while(*dest!\0){dest;}//找到之后开始追加while(num0*sour!\0){*dest*sour;dest;sour;num--;}//追加完成之后需要给dest后面追加一个\0*dest\0;returnret;}intmain(){chararr1[20]abcdef;chararr2[]qqqqq;my_strncat(arr1,arr2,2);printf(%s\n,arr1);return0;}先找到目标字符串的最后一个字符从这里开始拼接与strcat的模拟实现一样3.strncpy——拷贝源字符串的前num个字符到目标字符串中参数charstrncpy(chardest,const char*sour,size_t num)返回值返回目标字符串的地址使用intmain(){chararr1[]abcdefg;chararr2[20]{0};strncpy(arr2,arr1,2);printf(%s\n,arr2);return0;}模拟实现#includeassert.hchar*my_strncpy(char*dest,constchar*src,size_tn){char*retdest;assert(dest!NULLsrc!NULL);//1.源头字符串足够while(n0*src!\0){*dest*src;dest;src;n--;}//2.源头字符串不够需要用\0补while(*src\0n0){*dest\0;dest;n--;}returnret;}当出现numsour数组的字符个数时用’\0’补充

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询