memcopy 導致的程式碼崩潰問題,memcpy的三大踩坑記

阿日日發表於2020-10-31

知識點一: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。

相關文章