【基础C&C++】内存拷贝strcpy,memcpy,memmove,strncpy源码
2012-09-03 22:51
369 查看
strcpy
char *strcpy(char*strDest, const char *strSrc) { assert((strDest!=NULL) && (strSrc!=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0') NULL ; return address ; }
memmove
void *memmove(void *dst, const void*src, size_tcount) { void* ret = dst; if(dst <= src || (char *)dst >= ((char *)src + count)) {//不重叠或,拷贝不覆盖还未读的src while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } else{//逆向拷贝 dst= (char *)dst + count - 1; src= (char *)src + count - 1; while(count--) { *(char*)dst = *(char *)src; dst= (char *)dst - 1; src= (char *)src - 1; } } return(ret); }
memcpy
和strcpy一样void *memcpy(void*pvTo, void* pvFrom, size_t size) //byte是java里的变量类型 { void * ret = dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret); }
memset
void* memset(void* buffer, int c, int count) { char* pvTo=(char*)buffer; assert(buffer != NULL); while(count-->0) *pvTo++=(char)c; return buffer; }
strncpy
char * strncpy (char * dest,const char * source,size_tcount) { char *start = dest; while (count && (*dest++ =*source++)) /* copy string */ count--; if (count) /* pad out with zeroes */ while (--count) *dest++ = '\0'; return(start); }
相关文章推荐
- 内存拷贝strcpy(),memcpy(),memmove()比较
- c++ memcpy内存拷贝
- C++之strcpy、memcpy、memmove比较
- C/C++:memmove、memcpy、strcpy三者的区别
- C++基础——深拷贝&浅拷贝
- 转:C/C++:memmove、memcpy、strcpy三者的区别
- 杂杂的基础知识【Sizeof与Strlen&strcpy和memcpy&字符串常量和字符常量】
- strcpy实现机制,数组越界-->memcpy,memmove
- C\C++内存重叠问题,memcpy,memmov,strcpy
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- strcpy,memcpy,memmove和内存重叠分析
- 由strcpy和memcpy, memmove想到的 C/C++ 标准库
- C/C++基础面试集锦(一)strcpy、memcpy
- 【基础C&C++】内存函数
- 内存重叠之strcpy&memmove
- 常见内存拷贝函数:memcpy()、memmove()、strcpy()的实现及区别
- 【C/C++学习笔记】memmove()、memcpy()、memccpy()、strcpy()函数整理
- C/C++:memmove、memcpy、strcpy三者的区别
- 关于字串拷贝(strcpy之类)和内存拷贝(memcpy)
- 一些C的库函数,C++ stl函数源码(如:strcpy、memcpy和memmove)