C语言标准库常见函数的内部实现
2015-10-21 10:37
567 查看
1.从 C标准库 这本书中摘抄。http://book.douban.com/subject/3775842/
2.
1)memset
概述
#include <string.h>
void *memset(void *s,int c,size_t n);
说明:
函数memset把c(转换成unsigned char类型)的值复制到s指向的对象的前n个字符的每个字符中。
返回值:
函数memset返回s的值
函数实现:
2) memcpy
概述
#include <string.h>
void *memcpy(void *s1,const void *s2,size_t n);
说明
函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。
返回值
函数memcpy返回s1的值。
函数实现:
3)memmove
概述
#include <string.h>
void *memmove(void *s1,const void *s2,size_t n);
说明
函数memmove从s2指向的对象中复制n个字符到s1指向的对象中。复制看上去就像先把n个字符从s2指向的对象复制到一个n个字符的临时数组中,这个临时数组看上去和s1 s2指向的对象都不重叠,然后再把这n个字符从临时数组中复制到s1指向的对象中。
返回值
函数memmove返回s1的值
函数实现:
4)strcpy
概述
#include <string.h>
char *strcpy(char *s1,const char *s2);
说明
函数strcpy把s2指向的串(包括终止的空字符)复制到s1指向的数组中。如果复制发生在两个重叠的对象中,则行为未定义。
返回值
函数strcpy返回s1的值。
函数实现
5)strlen
概述
#include <string.h>
size_t strlen(const char *s);
说明
函数strlen计算s指向的串的长度
返回值
函数strlen返回终止的空字符前面的字符的数目
函数实现
2.
1)memset
概述
#include <string.h>
void *memset(void *s,int c,size_t n);
说明:
函数memset把c(转换成unsigned char类型)的值复制到s指向的对象的前n个字符的每个字符中。
返回值:
函数memset返回s的值
函数实现:
/* memset function */ #include <string.h> void *memset(void *s,int c,size_t n) { const unsigned char uc=c; unsigned char *su; for(su=s;0<n;++su,--n) *su=uc; return s; }
2) memcpy
概述
#include <string.h>
void *memcpy(void *s1,const void *s2,size_t n);
说明
函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。
返回值
函数memcpy返回s1的值。
函数实现:
#include <string.h> void *memcpy(void *s1,const void *s2,size_t n) { char *su1; const char *su2; for(su1=s1,su2=s2;0<n;++su1,++su2,--n) *su1=*su2; return s1; }
3)memmove
概述
#include <string.h>
void *memmove(void *s1,const void *s2,size_t n);
说明
函数memmove从s2指向的对象中复制n个字符到s1指向的对象中。复制看上去就像先把n个字符从s2指向的对象复制到一个n个字符的临时数组中,这个临时数组看上去和s1 s2指向的对象都不重叠,然后再把这n个字符从临时数组中复制到s1指向的对象中。
返回值
函数memmove返回s1的值
函数实现:
#include <string.h> void *memmove(void *s1,const void *s2,size_t n) { char *sc1; const char *sc2; sc1=s1; sc2=s2; if(sc2<sc1 && sc1<sc2+n) { for(sc1+=n,sc2+=n;0<n;--n) { *--sc1=*--sc2; } } else for(;0<n;--n) { *sc1++=*sc2++; } return s1; }
4)strcpy
概述
#include <string.h>
char *strcpy(char *s1,const char *s2);
说明
函数strcpy把s2指向的串(包括终止的空字符)复制到s1指向的数组中。如果复制发生在两个重叠的对象中,则行为未定义。
返回值
函数strcpy返回s1的值。
函数实现
#include <string.h> char *strcpy(char *s1,const char *s2) { char *s=s1; for(s=s1;(*s++=*s2++)!='\0';) ; return s1; }
5)strlen
概述
#include <string.h>
size_t strlen(const char *s);
说明
函数strlen计算s指向的串的长度
返回值
函数strlen返回终止的空字符前面的字符的数目
函数实现
#include <string.h> size_t strlen(const char *s) { const char *sc; for(sc=s;*sc!='\0';++sc) ; return sc-s; }
相关文章推荐
- C++的try、catch、throw异常
- 面试中的C++常见问题
- 第三章 Data语意学
- C语言之指针
- c语言读写文件
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- 记录-C和指针-第十章-结构和联合
- c++ Map使用
- 线性方程组(A是上三角矩阵时)的C++求解
- C++与python中关于程序运行时的计量
- c++字符窜切割
- 推荐一个c++小巧开源且跨平台的图像解码库
- 推荐一个c++小巧开源且跨平台的图像解码库
- Static用法总结
- C++11 的一些有用的特性1 VS2012可支持
- 待解决的问题 --- C++
- 学习C语言第二天
- C++ Boost 好资源
- c++ iterator
- (三)黑马程序员——c语言之字符串处理函数