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。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页