上海天局信息技术有限责任公司

网站首页 > 天局论坛 > Language > C

C语言中strcpy,strcmp,strlen,strcat函数原型

2018-03-08 21:57:45 上海天局信息技术有限责任公司 已读

strcat,strcpy,strcmp,strlen函数原型及其写法

相信大家对这几个函数相当熟悉,但是能轻松的写出它们的原型及其实现函数吗?恐怕会底气不足吧?那么此文将带你夯实基础,轻松搞定它们,并增进对它们的了解以便今后使用起来胸有成足。

strcat的函数原型如下:

  1. char *strcat(char *strDest, const char *strScr)  

下面就用实例演示其写法,并对关键步骤进行注解。

  1. #include "stdio.h"  

  2. #include "assert.h"  

  3. using namespace std;  

  4.   

  5. char *strcat(char *strDest, const char *strScr) //(1)  

  6. {  

  7.     char * address = strDest;   

  8.     assert((strDest != NULL) && (strScr != NULL)); //(2)        

  9.     while(*strDest!='\0')//(3)  

  10.     {                          

  11.         strDest++;//(4)  

  12.     }                          

  13.     while(*strDest++ = *strScr++)   

  14.     {  

  15.         NULL;   

  16.     }                          

  17.     return address; //(5)  

  18. }  

  19. int main()  

  20. {  

  21.     char str1[100]={"i can "};  

  22.     char str2[50]={"write strcat"};  

  23.     printf("%s\n",strcat(str1,str2));  

  24.     return 0;  

  25. }  

运行结果如下:

图片关键词

(1)  将源字符串加上const声明,表明其为输入参数

(2)  断言assert的用法,如果条件成立程序正常运行,如果不成立报错并终止程序的运行,大家可以自己测试一下assert函数的用法,看看具体的效果如何。

(3)  等价于while(*strDest),若使用while(*strDes++!=’\0’),则会出现strScr不能连接到strDest后面的情况,因为++操作不受循环的约束的,这样while结束时*strDest并没有指向字符串的结束符‘0’,再执行strScr赋值操作已是无用了,因为strDest中已经出现结束符‘\0’了。

(4)  为了实现链式操作,将目的地址返回

看完之后是不是觉得很简单,那么下面其他函数的实现就不过多解释了,请诸君自己体会。

strcpy函数原型如下:


  1. char *strcpy(char *strDest, const char *strScr)  

其实现代码和运行结果如下所示:


  1. #include "stdio.h"  

  2. #include "assert.h"  

  3.   

  4. char *strcpy(char *strDest, const char *strScr)  

  5. {  

  6.     char *address = strDest;  

  7.     assert((strDest != NULL) && (strScr != NULL));  

  8.     while(*strScr)  

  9.     {  

  10.         *strDest++ = *strScr++;  

  11.     }  

  12.     *strDest = '\0';  

  13.     return address;  

  14. }  

  15.   

  16. void main()  

  17. {  

  18.     char str1[100]={"i can write strcpy "};  

  19.     char str2[50]={"strcpy is so easy"};  

  20.     printf("%s\n",strcpy(str1,str2));  

  21. }  

运行结果如下:

图片关键词

strcmp的函数原型如下:


  1. int strcmpa (const char *str1,const char *str2)  

其实现代码及运行结果如下:


  1. #include <stdio.h>  

  2. #include <assert.h>  

  3. int strcmpa (const char *str1,const char *str2)  

  4. {             

  5.     int len = 0;  

  6.     assert((str1 != '\0') && (str2 != '\0'));  

  7.     while(*str1 && *str2 && (*str1==*str2))  

  8.     {  

  9.         str1++;  

  10.         str2++;  

  11.     }  

  12.     if((*str1-*str2)>0)//(1)  

  13.         return 1;  

  14.     else if((*str1-*str2)<0)  

  15.         return -1;  

  16.     else  

  17.         return 0;  

  18. }  

  19.   

  20. void main()  

  21. {  

  22.     char str1[100] = {"abcd"};  

  23.     char str2[50] = {"bcde "};  

  24.     printf("%d\n",strcmpa(str1,str2));  

  25. }  

(1)根据编译器不同其返回值有所不同,对VS和VC编译器而言,返回值就如同代码所述一样。

运行结果如下:

图片关键词

strlen的函数原型如下:


  1. int strlena(const char *str)  

其实现代码及运行结果如下:


  1. #include <stdio.h>  

  2. #include <assert.h>  

  3.   

  4. int strlena(const char *str)  

  5. {  

  6.     int len = 0;  

  7.     assert(str != NULL);  

  8.     while(*str++)  

  9.     {  

  10.         len++;  

  11.     }  

  12.     return len;  

  13. }  

  14. int main()  

  15. {  

  16.     char str1[100] = {"strlen is so easy"};  

  17.     char str2[50] = {"i love C/C++"};  

  18.     printf("strlen is so easy的长度为:");  

  19.     printf("%d\n",strlena(str1));  

  20.     printf("i love C/C++的长度为:");  

  21.     printf("%d\n",strlena(str2));  

  22.     return 0;  

  23. }  

运行结果如下:

图片关键词

掌握这些函数的原型及写法,不仅可以更好的运用它,更能练习字符串的相关处理的基本功,何乐不为。


Powered by MetInfo 5.3.17 ©2008-2022 www.metinfo.cn