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。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42731088/article/details/109390061

浙公网安备 33010602011771号