strlen/strcmp/strcat/strcpy的实现
2016-05-19 19:12
381 查看
1. strlen
#include <cstddef> size_t strlen(const char* p) { if(p==NULL){ return 0; } size_t len=0; while((*p++)!='\0'){ len++; } return len; }
strlen 与 sizeof 的区别: sizeof是运算符,strlen是库函数。 sizeof可以用类型、变量做参数,而strlen只能用 char* 变量做参数,且必须以\0结尾。 sizeof是在编译的时候计算类型或变量所占内存的大小,而strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度。 数组做sizeof的参数不退化,传递给strlen就退化为指针了。
2. strcmp
#include <assert.h> int strcmp(const char *p1,const char *p2) { assert(p1!=NULL && p2!=NULL); //assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 while(*p1==*p2){ p1++; p2++; } if(*p1=='\0' && *p2=='0'){ return 0; } return ((unsigned char)*p1<(unsigned char)*p2)?-1:1; }
3. strcat
#include <assert.h> char* strcat(char *p1,char *p2) { assert(p1!=NULL && p2!=NULL); char* dest=p1; while(*dest!='\0'){ dest++: } while(*p2!='\0'){ *dest++=*p2++; } return p1; }
4. strcpy
#include <assert.h> char* strcpy(char *p1,char* p2) { assert(p1!=NULL && p2!=NULL); char* p=p1; while(*p2!='\0'){ *p++=*p2++; } *p='\0'; return p1; }
相关文章推荐
- entity framework(EF) 中的Lambda表达式简单应用
- Android RenderScript的应用和进阶 图片高效处理
- 广度优先搜索练习之神奇的电梯----BFS
- Uva 1585
- 图解Oracle 12c 安装示例数据库
- 网络信息安全攻防实验室 脚本关第二关
- 给 Android 开发者的 RxJava 详解
- label标签的用法
- 基础总结篇之九:Intent应用详解
- poj 2774
- 用 Dojo 1.x 开发小部件
- Android通过Wifi来调试应用
- 11、串口编程
- CSS3D效果
- VxWorks_AuxClk
- Java Decompiler
- ionic入门教程第十六课-在微信中使用ionic的解决方案(按需加载加强版)
- 怎样解决asp.net.mvc上传附件超过长度问题?
- 使用弹性盒子模型的一些思考
- SQL Server之视图及自定义 函数