部分库函数源码
来源:互联网 发布:game.min.js 编辑:程序博客网 时间:2024/06/03 19:45
函数源码
strcpy源码:
char *strcpy(char *strDes, const char *strSrc) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while ((*strDes ++ = *strSrc ++) != '\0') NULL; return address;
注意:strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出,也就是说,不过dest有没有足够的空间来容纳src的字符串,它都会把src指向的字符串全部复制到从dest开始的内存
strcmp源码:
int strcmp(const char *s, const char *t) { assert(s != NULL && t != NULL); while (*s && *t && *s == *t) { ++ s; ++ t; } return (*s - *t); }
strcat源码:
char *strcat(char *strDes, const char *strSrc) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while (*strDes != '\0') ++ strDes; while ((*strDes ++ = *strSrc ++) != '\0') NULL; return address; }
注意:1.不能向形参传递指向字符串常量的指针(本题中dst和src都是指向串常量的指针,字符串常量存储在常量区不能被修改
2.传递的字符数组前一个实参的所分配的内存空间必须足够大
strlen源码:
int strlen(const char *str) { assert(str != NULL); int len = 0; while (*str ++ != '\0') ++ len; return len; }
strstr源码:
char *strstr(const char *strSrc, const char *str) { assert(strSrc != NULL && str != NULL); const char *s = strSrc; const char *t = str; for (; *t != '\0'; ++ strSrc) { for (s = strSrc, t = str; *t != '\0' && *s == *t; ++s, ++t) NULL; if (*t == '\0') return (char *) strSrc; } return NULL; }
strchr源码:
char * __cdecl strchr ( constchar * string, int ch ){ while (*string && *string != (char)ch) string++; if (*string == (char)ch) return((char *)string); return(NULL);}
断言:assert(表达式)如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句,使用这个宏前需要包含头文件assert.h
结语:函数就向一个黑盒一样,调用它的人给他输入(调用它本身就是一种输入),然后等待一个理想中的输出或者是相应的操作。调用者是希望我们的这个函数能够非常健壮的让他们利用,那么为了使我们的函数拥有一定的鲁棒性。
阅读全文
0 0
- 部分库函数源码
- 标准库函数部分简述
- 部分C库函数重写
- 实现部分库函数
- 模拟实现部分库函数
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr,
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- C 库函数源码
- strcmp库函数源码心得
- C/C++部分库函数总结
- keil C51部分库函数源代码
- C语言部分库函数实现
- C部分标准库函数用法
- go语言部分runtime库函数
- 部分库函数的自我实现
- 库函数源码级别的单元测试
- 文章标题
- springAop 运用之权限验证
- java发送邮件(javaMail通过SMTP发送邮件)
- javascript内置对象常用属性和方法(笔记一)
- 【终极面试】线程向
- 部分库函数源码
- linq去重
- VS项目属性的一些配置项的总结(important)
- 使用阿里云搭建自己的服务器,并部署IIS为自己的app提供服务
- 用Js的eval解析JSON用法
- 温故知新(2)虚方法、隐藏方法、抽象类
- 【fastDFS】Nginx+FastDFS module安装
- 如何重复使用TIMER 避免计时累加
- 这里有你对 Web 游戏的疑问吗?