memcopy 导致的代码崩溃问题,memcpy的三大踩坑记

知识点一:memcpy拷贝的是字节!!字节!!字节!!重要的事情说三遍。

memcpy拷贝的是字节,网友的踩的坑

知识点二:char *a="abcde"这种写法数据在常量静态区,常量区写入非法,下面的代码执行到memcpy就会崩溃

  char *a="abcde";
 
  char *b="12345";
 
  memcpy(a,b,2);
 
 printf("*a=%c,*b=%c",*a,*b);

 知识点三:定义一个char SerialNumber[16],并不会自动在结尾加上‘/0’。

//memset(SerialNumber,0,CARD_SERIAL_NUM);为什么必须初始化呢,因为初始化会在尾巴上加上'/0'


char SerialNumber[16];
char source[]=“hello”;
//屏蔽这个会crash,打开则不会
//memset(SerialNumber,0,CARD_SERIAL_NUM);


memcpy(SerialNumber,source,5);

//打印strlen(SerialNumber)会导致崩溃
LOGE("SerialNumberlen","%d",strlen(SerialNumber));

原因分析:定义一个char SerialNumber[16] 不初始化的时候,这个char指向一块内存区域,但是结尾并没有'0',这个会导致使用memcpy时候,当copy的字符串的长度小于SeriaNumber的长度时候,由于结尾没有"/0"

 导致strlen(SerialNumber)出错,程序crash。

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值