C和指针之字符串memcpy、memmove、memset使用总结
来源:互联网 发布:社交网络关系图 编辑:程序博客网 时间:2024/05/20 11:23
1、介绍memcpy、memmove、memset
1) void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
2) void *memmove( void* dest, const void* src, size_t count );
从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中
3) void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法[2、测试Demo
#include <stdio.h>#include <string.h>//memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的始位置中//memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中//memset将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,它是结构体或数组进行清零操作一种最方法,一般都是按字节进行赋值//因为memset是以字节为单位就是对array指向的内存的4个字节进行赋值,字节,合一起就是00000001000000010000000100000001,就等于16843009//memset对非字符型数组赋初值是不可取int main(){char *src = "chenyuchenyu";char des_one[30];char des_two[30];//从头开始复制memcpy(des_one, src, strlen(src) + 1);printf("des_one is %s\n", des_one);//从src中间位置开始复制memcpy(des_two, src + 5, 5);printf("des_two is %s\n", des_two);//复制后覆盖原有数据char src_one[] = "***";char des_three[] = "chenyu";memcpy(des_three, src_one, strlen(src_one));printf("des_three is %s\n", des_three);//目标和源有重叠用memmovechar src_two[] = "chenyuhelloword";memmove(src_two, src_two + 7, strlen(src_two) + 1 -7);printf("src_two is %s\n", src_two);char src_three[5];memset(src_three, '1', 5);for (int i = 0; i < 5; i++){printf("src_three[%d] is %c\n", i, src_three[i]);} int src_four[5];memset(src_four, 1, 20);for (int i = 0; i < 5; i++){printf("src_three[%d] is %d\n", i, src_four[i]);}/**这里是字符串常量不能被修改,所以这里编译可以运行会出错char *sss = "chenyu";memset(sss, 'c', 3);printf("sss is %s\n", sss);**/return 0;}
3、运行结果
des_one is chenyuchenyudes_two is uchendes_three is ***nyusrc_two is ellowordsrc_three[0] is 1src_three[1] is 1src_three[2] is 1src_three[3] is 1src_three[4] is 1src_three[0] is 16843009src_three[1] is 16843009src_three[2] is 16843009src_three[3] is 16843009src_three[4] is 16843009
4、分析
memset是按照字节单位来赋值的,memset是以字节为单位就是对src_four指向的内存的4个字节进行赋值,字节,合一起就是00000001000000010000000100000001,就等于16843009
所以我们不能对非字符类型的数组进行赋值,一般对字符数组进行赋值,除非对非字符数组置为0
阅读全文
0 0
- C和指针之字符串memcpy、memmove、memset使用总结
- C语言memset、memcpy、memmove和strcpy
- memcpy,memmove和memset
- memset和memcpy、memmove实现
- C语言中memcpy、memset和memmove的实现
- strcpy、memset、memmove、memcpy和memccpy函数的使用
- C语言模拟实现memcpy、memmove、memset
- memcpy,memset,memmove的使用与实现
- memcpy memset memmove
- memset,strcpy memcpy memmove
- memset(),memmove(),memcpy(),memccpy()
- strcpy,memcpy,memmove,memset
- memset memcpy memmove
- 一些常用的字符串处理函数总结memcpy、memmove、memset、memcmp、memchr等
- strcpy、memset、memmove、memcpy和memccpy函数的使用和区别
- memcpy和memmove 的使用
- 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数
- 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数
- Windows10 设置共享网络
- Oracle中分页查询语句
- @Autowired,@Inject,@Resource
- 二维动态数组的创建
- Py4j
- C和指针之字符串memcpy、memmove、memset使用总结
- day02_javascript
- mybatis传集合参数 注意事项
- 用 Java 实现一个简单的多线程 web 服务器
- SonarQube安装、配置、扫描代码
- avaWeb之使用servlet搭建服务器入门
- 初识Shell
- qt程序崩溃生成core dump
- 教你如何看懂自己的ROM版本号,从此告别被忽悠!