memset实例(一)

举报
鱼酱 发表于 2022/01/06 23:09:37 2022/01/06
【摘要】 工作中,很常用的一个方法,mark,截取了一部分~~~~ #include <iostream>#include <string.h>using namespace std;//void *memset(void *s, int ch, size_t n);//函数解释:将s中前n个字节 (typ...


工作中,很常用的一个方法,mark,截取了一部分~~~~



  
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. //void *memset(void *s, int ch, size_t n);
  5. //函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
  6. int main(int argc, char** argv) {
  7. /*一定要记住如果要把一个char a[20]清零,一定是 memset(a,0,20*sizeof(char));
  8. 而不是 memset(a,20*sizeof(char),0);*/
  9. //过度使用memset,我想这些程序员可能有某种心理阴影,他们惧怕未经初始化的内存,所以他们会写出这样的代码:
  10. //这里的memset是多余的. 因为这块内存马上就被全部覆盖,清零没有意义.
  11. #if 0
  12. char buffer[4];
  13. memset(buffer,0,sizeof(char)*4);
  14. strcpy(buffer,"123");
  15. #endif
  16. #if 0
  17. char buffer[20];
  18. memset(buffer,0,sizeof(char)*20);
  19. memcpy(buffer,"123",3);
  20. //这一条的memset并不多余,memcpy并没把buffer全部覆盖,如果没有memset,
  21. //用printf打印buffer会有乱码甚至会出现段错误。
  22. //如果此处是strcpy(buffer,"123");便不用memset,
  23. //strcpy虽然不会覆盖buffer但是会拷贝字符串结束符
  24. //补充:void *memcpy(void *dest, const void *src, size_t n);
  25. //从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
  26. #endif
  27. #if 0 //标准例子
  28. char buffer[]="Helloworld\n";
  29. printf("Buffer before memset:%s\n",buffer);
  30. memset(buffer,'*',strlen(buffer));
  31. printf("Buffer after memset:%s\n",buffer);
  32. return 0;
  33. #endif
  34. }




文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。

原文链接:yujiang.blog.csdn.net/article/details/51108409

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。