strcpy, memcpy, memmove, memset的实现
程序员文章站
2024-01-21 13:06:28
...
strcpy() 字符串拷贝
char *strcpy(char *strDest, const char *strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0'); return address ; }
memcpy 拷贝不重叠的内存块
void *memcpy(void* pvTo, void* pvFrom, size_t size) //byte是java里的变量类型 { assert(pvTo != NULL && pvFrom != NULL); byte* pbTo = (byte*)pvTo; byte* pbFrom = (byte*)pvFrom; /* 内存块重叠吗?如果重叠,就使用memmove */ assert(pbTo>=pbFrom+size || pbFrom>=pbTo+size); while(size-->0) *pbTo++ == *pbFrom++; return pvTo; }
memmove 可拷贝重叠的内存块
void* memmove(void *dest, const void *src,size_t n) { if (n == 0) return 0; if (dest == NULL) return 0; if (src == NULL) return 0; char *psrc = (char*)src; char *pdest = (char*)dest; if((dest <= psrc) || (pdest >= psrc + n)) /*检查是否有重叠问题 */ { for(int i=0; i < n; i++) /*正向拷贝*/ { *pdest = *psrc; psrc++; pdest++; } } else /*反向拷贝*/ { psrc += n; pdest += n; for(int i=0;i<n;i++) { psrc--; pdest--; *pdest = *psrc; } } return dest; }
memset 把buffer所指内存区域的前count个字节设置成字符cvoid * memset(void* buffer, int c, int count)
{ char* pvTo=(char*)buffer; assert(buffer != NULL); while(count-->0) *pvTo++=(char)c; return buffer; }
上一篇: 常见HTTP状态说明(301,304,200,404)
下一篇: DNF公平PK场规则介绍
推荐阅读
-
strcpy, memcpy, memmove, memset的实现
-
memset, memcpy和strcpy的比较
-
C语言模拟实现memcpy,memmove函数
-
memcpy() 实现循环缓冲区数据的读写
-
strlen、strcpy、strcat函数的自主实现
-
memset memcmp memcpy memmove 自己实现
-
第 16 章 C 预处理器和 C 库(string.h 库中的 memcpy() 和 memmove())
-
go语言中切片与内存复制 memcpy 的实现操作
-
用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
-
模拟实现C库的memmove和memcpy