内存操作
来源:互联网 发布:网络传播营销策划案 编辑:程序博客网 时间:2024/05/21 22:02
根据定义,字符串由一个NUL(‘\0’)字节结尾,所以字符串内部不能包含任何NUL字符,但是,内部包含NUL的字符串是可能存在的,此时我们不能使用字符串处理函数来
处理这种类型的数据。
我们可以使用另外一组相关的函数它们的操作与字符串函数类似,但是这些函数能够处理任何字节序列。he strn开头的函数不同,这些函数遇到NUL不会停止操作。
1.memcpy
void *memcpy(void *dst,const void *src,size_t length)
从src的起始位置复制length个字节到dst的内存起始位置。可以使用该函数复制任何类型的值,第三个参数指定复制值的长度(以字节为单位)。如果src和dst出现了内存重叠,结果是未定义的。
char temp[SIZE],value[SIZE];memcpy(temp,value,SIZE)
如果是其他类型(大于一个字节),例如int
int temp[SIZE],value[SIZE];memcpy(temp,value,sizeof(value))
或者:
memcpy(temp,value,SIZE*sizeof(int))
2.memmove
void *memmove(void *dst,const void *src,size_t length)
该函数和memcpy基本一样,只是它允许src和dst存在内存重叠。
3.memcmp
void *memcmp(const void *a,const void *b,size_t length)
比较两部分内存,共比较length个字节,这些值按照无符号字符逐个比较,返回负数表示a<b ,返回正数表示a>b ,返回0表示a==b。
由于这些值是按照无符号字节进行比较的,所以如果用于比较的不是单字节数据如整数或浮点数就可能出现不可预料的结果。
4.memchr
void *memchr(const void *a,int ch,size_t length)
从a的起始位置开始查找字符ch第一次出现的位置,并返回一个指向该位置的指针,它共查找length个字节。如果未找到,则返回空指针。
5.memset
void *memset(void *a,int ch,size_t length)将a开始的length个字节都设置为字符值ch。
这个函数很容易出错,特别要注意,它是以字节为单位来设置为ch值的。
例如,将一个数组置0:
int x[10];memset(x, 0, sizeof(x));
int x[10];memset(x, 1, sizeof(x));
我们看看:
咦,奇怪,怎么不是1呢?这个16843009又是怎么回事。
这里,让我再说一次,memset(其他的mem开头函数也一样)操作内存是以字节为单位的!!!!
由于每个int占4个字节,当调用memset(x, 1, sizeof(x))时,int的4个字节被逐个设置为1:
它的十进制正好就是16843009
mem开头的函数操作内存是以字节为单位的!!!!!!!!!
阅读全文
0 0
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 内存操作
- 字符串操作&内存操作
- I/O内存内存操作
- (转)内存操作
- vb操作内存
- C++内存分配操作
- 共享内存操作类
- Android之利用正则表达式校验邮箱、手机号、密码、身份证号码等
- mina两种协议获取方式(TCP/UDP)
- hive 表修改字段类型
- html5移动端input file可进行拍照和选择图片
- [学习linux]Ubuntu kylin 16.04下安装mysql 问题及总结
- 内存操作
- gcc链接阶段
- (转)ProgressDialog使用总结
- CSV常用命令
- 13 明白了这点才能拿高薪
- Kotlin语法(八)-方法和lambda表达式
- leetcode.476. Number Complement
- 删除作业,执行带参作业
- HeadZoomScrollView下拉放大的图片松开回弹