当前位置: 首页 > news >正文

龙岩市住房和城乡建设厅网站海口智能建站详情

龙岩市住房和城乡建设厅网站,海口智能建站详情,网站建设与优化推广的话术,山西汽车网站建设strcpy拷贝的仅仅是字符串#xff0c;但是内存中的数据不仅仅是字符#xff0c;所以就有了memcpy函数 1. memcpy void *memcpy #xff08;void * destination #xff0c;const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到desti… strcpy拷贝的仅仅是字符串但是内存中的数据不仅仅是字符所以就有了memcpy函数 1. memcpy void *memcpy void * destination const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到destination的内存位置 #includestring.h int main() {int arr1[10] { 0 };int arr2[] { 1,2,3,4,5 };//把arr2中的前5个整形的数据拷贝放到arr1中memcpy(arr1, arr2, 20);return 0; } 可以看到前5个整形都拷贝过来了  memcpy函数的模拟实现 1一个字节一个字节的拷贝destsrc转为char * eg如果拷贝7个字节两个int *类型指针不能操作 2char *dest不能这样写因为的优先级高于强制类型转换 相当于先对原类型进行再进行进行强转 前置char *)dest虽然C语言中可以但是改为c就不能运行所以还是正常写1 #includestring.h #includeassert.h void* my_memcpy(void* dest, const void* src, size_t sz) {void * retdest;assert(dest src);while (sz--){*(char*)dest *(char*)src;dest (char*)dest 1;src (char*)src 1;}return ret; } 一个数组arr{12345678910}如果想在自身的基础上进行拷贝即把12345拷贝到34567的位置上想得到结果12123458910 但是得到的结果却是1 2 1 2 1 2 1 8 9 10 我们就发现不重叠内存的拷贝可以使用memcpy 重叠内存的拷贝使用memmove函数 上面其实是标准规定但是实际在VS2022这个环境中memcpy也能实现重叠内存的拷贝 其他平台不一定 #includestdio.h #includestring.h #includeassert.h void* my_memcpy(void* dest, const void* src, size_t sz) {assert(dest src);while (sz--){*(char*)dest *(char*)src;dest (char*)dest 1;//这里不能写成char*dest强制类型转化是临时的的时候dest并不一定是char*类型的src (char*)src 1;} } int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };my_memcpy(arr 2, arr, 20);for (int i 0; i 10; i){printf(%d , arr[i]);}return 0; } 2. memmove void *memmovevoid * destination const void * source , size_t num) 参数和memcpy一样但是memmove可以实现重叠内存的拷贝 memmove函数的模拟实现 这里不考虑直接开辟一个相同的空间再进行拷贝元素 讨论 destsrc:只能从前向后拷贝 destsrc:只能从后向前拷贝 dest和src不相干的时候从后往前或者从前往后都可以 #includestdio.h #includeassert.h void* my_memmove(void* dest, const void* src, size_t sz) {void* ret dest;assert(dest src);if (dest src){//前-后while (sz--){*(char*)dest *(char*)src;dest (char*)dest1;src (char*)src1;}}else{//后-前while (sz--){*((char*)dest sz) *((char*)src sz);}}return ret; } int main() {int arr[20] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr , arr2, 20);for (int i 0; i 10; i){printf(%d , arr[i]);}return 0; } 3. memcmp int memcmp ( const void * ptr1,const void *( ptr2  ,  size_t num ) 类似strcmp函数memcmp是一对字节一对字节进行比较比较num个字节ACSII值 1返回值 如果返回值 0则表示 str1 小于 str2如果返回值 0则表示 str1 大于 str2如果返回值 0则表示 str1 等于 str2 #includestdio.h #includestring.h int main() {int arr1[] { 1,2,3,4,5,6,7 };//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00int arr2[] { 1,2,3,0x11223304 };//01 00 00 00 02 00 00 00 03 00 00 00 04 33 22 11 int ret memcmp(arr1, arr2, 13);printf(%d\n, ret); } 上面这个代码虽然arr1的元素多但是比较前13个字节的大小都一样那么ret0 4. memset void *memset( void *dest, int c, size_t count )  复制字符c一个无符号字符到参数str所指向的字符串的前n个字符 初始化前count个字节为c 是以字节为单位设置内存的 eg1:将hello world中的wor改为xxx #includestdio.h #includestring.h int main() {char arr[] hell0 world;memset(arr 6, x, 3);printf(%s\n, arr);return 0; } eg2 思考这个代码将arr改为了啥 #includestdio.h #includestring.h int main() {int arr[10] { 0 };memset(arr, 1, 40);return 0; } 每一个int类型的元素的每一个字节都改为了1 所以想把数组每一个元素都初始化为1用memset函数是不可能实现的 但是可以都初始化为0 本次内容就到此啦欢迎评论区或者私信交流觉得笔者写的还可以或者自己有些许收获的麻烦铁汁们动动小手给俺来个一键三连万分感谢 !
http://www.yutouwan.com/news/158137/

相关文章:

  • 做网站前台步骤南宁网站建设 南宁联达亿
  • 申请网站多少钱服务好的成都网站建设
  • 网站图片计时器怎么做南京网站建设 ww
  • 厦门网站设计免费cad图纸下载网
  • 为企业设计网站linux wordpress建站教程
  • 游戏网站建设收费明细安卓应用开发教程
  • 我公司是做网站开发的怎么纳税小程序商城开发说明
  • wordpress 修改站点订阅号上链接的网站怎么做的
  • 哪些网站做的比较好看的快速搭建网站 优帮云
  • 九亭镇村镇建设办官方网站最新的网站建设软件有哪些
  • 东营市垦利区胜坨填建设站的网站代发货网站系统建设
  • 南阳哪里做网站比较好网站建设活动
  • 西安网站设计哪家公司好建设垂直网站需要哪些流程图
  • 表情包生成器在线制作网站wordpress微信登陆
  • 如何把网站做的好看做网站遇到各种问题
  • 常州网络推广网站耐克电子商务网站建设
  • 做网赌网站百度关键词怎么做排名
  • 房山重庆网站建设asp网站转php
  • 做网站的私活南沙移动网站建设
  • 衡阳建设网站公司seo排名方案
  • 淘客自己的网站怎么做目前哪个城市又封了
  • 织梦cms发布侵权网站清单wordpress登陆不上
  • 北京响应式网站建设公司7款优秀网站设计欣赏
  • 公司做网站会计分录0wordpress tint-k主题
  • 网站内容如何管理重庆市建设厅官网
  • 定制开发网站多少钱wordpress上传模板
  • 海南网站制做的公司网上申请营业执照入口
  • 江苏建设网官方网站赣榆区城乡建设局网站
  • 做的好的ppt下载网站有哪些网站的登录弹窗怎么做
  • 论坛做视频网站知乎推广合作