memcpy与memset
来源:互联网 发布:nba2konline作弊软件 编辑:程序博客网 时间:2024/05/29 07:48
一,strcpy()
char *strcpy(char *dest, const char *src){ if ((src == NULL) || (dest == NULL)){ return NULL; } char *temp = dest; while (*strSrc != '\0'){ *strDest ++ = *strSrc ++; } return temp;}
二,memcpy()
void *memcpy(void *dest,const void *src, size_t count){ if(dest == NULL || src == NULL){ return NULL; } char *pDest = static_cast<char*>(dest); const char *pSrc = static_cast<const char*>(src); int i = 0; while (i < count){ *pDest ++ = *pSrc ++; i ++; } return dest;}
三,strcpy与memcpy之间的区别
(1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型数组等。
(2)复制的方法不同。strcpy不需要指定长度,它遇到串结束符"\0"就结束,所以容易溢出,例如:dest的长度为5,而src的长度为10,复制的时间dest就会溢出,也就是dest越界了。memcpy则是根据其第3个参数决定复制的长度。
(3)用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
四,memset()
函数声明:
void *memset(void *s, char ch, unsigned n)
函数用法:
将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,并且通常初始化为0或者字符'\0'。
应用举例:
struct Student{ int age; string name;};int main(){ //对字符数组进行初始化 char str[20]; memset(str, '\0', sizeof(str)); //对整数数组进行初始化 int nums[20]; memset(nums, 0, sizeof(nums) * sizeof(int)); //对结构体进行初始化 Student zhangsan; memset(&zhangsan, 0, sizeof(Student)); return 0;}
注意:
(1)memset的第一个参数已经有了被初始化空间的首地址,为什么还要返回一个void*的指针去指向这个地址呢?这种结构在很多函数库里面比较常见,这里之所以还要返回这个指针是为了实现链式编程。
(2)一定要注意,memset是按照字节对空间进行初始化的,也就是说,函数里面的第二个参数的那个初值(一般为0)是按照一个一个字节往第一个参数所指区域赋值的,所以,对于单字节数据类型(char)可以初始化为任意支持的值,但是对于非多字节数据类型只能初始化为0,而不能初始化成别的初值。
五,自定义memset函数
void *memset(void *s, char ch, unsigned n){ if(s == NULL){ return NULL; } char *str = (char*)(s); int length = sizeof(str); int minValue = length > n ? n : length; int i = 0; while(i < minValue){ *str ++ = ch; i ++; } return s;}
阅读全文
0 0
- memset ,memcpy 与strcpy
- memset与memcpy用法
- memset与memcpy
- memcpy与memset
- memset与memcpy 2011.04.07
- memset,memcpy与memmove,strcpy
- memcpy 与memset的使用方法
- 读书笔记之:memcpy与memset
- memset与memcpy的用法
- Memset memcpy
- memcpy,memset
- memcpy/memset
- memset memcpy
- memset & memcpy
- memset(),memcpy()
- memset与memcpy用法,及作用
- strcpy()、memcpy()与memset()的用法比较
- memset、memcpy与strcpy使用心得
- 处理sql server的死锁 [kill spid]
- Cheapest Palindrome POJ
- Generating Permutations UVA
- REM手机屏幕适配
- 论文阅读实践
- memcpy与memset
- Javaweb核心之session&cookie
- Irrlicht 源码学习笔记 【irrstring.h】
- vim的ex模式用法
- 《数学之美》—— 读后总结
- 一切从现在开始
- SVN更新后显示 A\R\U\C\G代表的含义
- Excel 3个简单技巧轻松避免格式不规范数据出错
- oozie 常用命令